#javascript #mysql #node.js #express #ejs
#javascript #mysql #node.js #выразить #ejs
Вопрос:
Когда я пытаюсь отправить форму входа, созданную файлом new.ejs, я перенаправляюсь на страницу с ошибкой, часть которой гласит
Не удается прочитать свойство ‘insertUsername’ неопределенного
Это сообщение также появляется в консоли. Что происходит и как я могу это исправить?
вот мой idex.js
const express = require('express');
const app = express();
const routes = require('./routes');
const path = require('path');
const fileUpload = require('express-fileupload');
const bodyParser = require('body-parser');
const session = require('express-session');
const auth = require('./routes/auth');
const {
con,
sessionStore
} = require('./config/db');
const fs = require('fs');
require('dotenv').config({
path: path.join(__dirname, '.env')
});
const port = process.env.PORT || 3000;
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({
extended: false
}));
// parse application/json
app.use(bodyParser.json());
//static files
app.use(express.static('public'))
app.use('/css' , express.static(__dirname 'public/css'))
app.use('/imgs' , express.static(__dirname 'public/imgs'))
var sess = {
secret: 'keyboard cat',
store: sessionStore,
cookie: {
httpOnly: false,
},
resave: false,
saveUninitialized: false
}
app.use(session(sess));
app.use(fileUpload());
//set views
app.set('view engine' , 'ejs');
app.set('views', path.join(__dirname, 'views'));
app.use(require('connect-flash')());
app.use((req, res, next) => {
res.locals.messages = require('express-messages')(req, res);
next();
});
app.get('/', (req,res) =>{
res.render('index22')
});
app.get('/login', (req, res) => {
res.render('login');
});
let s;
const loginRequired = (req, res, next) => {
if (req.session.username) {
s = req.session;
next();
} else {
res.redirect('/auth/login');
}
};
app.get('/new', loginRequired, routes.new);//call for main index page
app.post('/', loginRequired, routes.new);//call for signup post
app.get('/show/:username', loginRequired, routes.show);
routes.js
const {
con,
sessionStore
} = require('./config/db');
exports.new = function(req, res){
message = '';
if(req.method == "POST"){
const post = req.body;
const username= post.username;
const title= post.title;
const state= post.state;
const category= post.category;
const description= post.description;
if (!req.files)
return res.status(400).send('No files were uploaded.');
const file = req.files.uploaded_image;
const img_name=file.name;
if(file.mimetype == "image/jpeg" ||file.mimetype == "image/png"||file.mimetype == "image/gif" ){
file.mv('public/imgs/uploads/' file.name, function(err) {
if (err)
return res.status(500).send(err);
var sql = "INSERT INTO `nt_data`(`username`,`title`,`state`,`category`, `images` ,`description`) VALUES ('" username "','" title "','" state "','" category "','" img_name "','" description "')";
var query = con.query(sql, function(err, result) {
res.redirect('show/' result.insertUsername);
});
});
} else {
message = "This format is not allowed , please upload file with '.png','.gif','.jpg'";
res.render('new.ejs',{message: message});
}
} else {
res.render('new');
}
};
exports.show = function(req, res){
let message = '';
var username = req.params.username;
const sql="SELECT * FROM `nt_data` WHERE `username`='" username "'";
con.query(sql, function(err, result){
if(result.length <= 0)
message = "show not found!";
res.render('show.ejs',{data:result, message: message});
});
};
Комментарии:
1. проверьте, является ли результат пустым перед res.redirect(‘show /’ result.insertUsername);
2. @HemanthB Проверка не нужна, поскольку результата никогда не может быть.
3. И когда запрос возвращает результаты, они находятся в массиве.
Ответ №1:
Вы получаете результаты только из SELECT
запросов, а не INSERT
, UPDATE
, или DELETE
. Просто используйте имя пользователя в username
переменной для перенаправления.
Кроме того, используйте заполнитель для переменных данных в запросе.
var sql = "INSERT INTO `nt_data`(`username`,`title`,`state`,`category`, `images` ,`description`) VALUES ?";
var query = con.query(sql, [username, title, state, category, img_name, description], function(err) {
if (!err) {
res.redirect('show/' username);
}
});
Комментарии:
1. Я полностью понял ваш второй пункт, но я не понял ваш первый пункт, где именно требуется изменение.
2. Я показал точный код замены, я не уверен, чего вы не понимаете.
3. Вы получаете результаты только из запросов SELECT, а не INSERT, UPDATE или DELETE. Просто используйте имя пользователя в переменной username для перенаправления. Эта часть
4. Прямо здесь:
res.redirect('show/' username);
5. Я внес предложенные вами изменения, но теперь он показывает ReferenceError: изображения не определены