[英]Cannot read property in express
抱歉,知道這樣的問題很流行,但是我在那找不到答案。
有輸出
無法讀取未定義的屬性“標題”
鏈接到此文件中的發布請求
const express = require('express');
const router = express.Router();
router.get('/', function (req, res, next) {
let query = 'select event.id, event.title, event.description, event.date, place.title as place, organisator.title as organisator, subcategory.title as subcategory from ((event inner join place on event.place_id = place.id) inner join organisator on event.organisator_id = organisator.id) inner join subcategory on event.subcategory_id = subcategory.id';
res.locals.connection.query(query, function (error, results, fields) {
if (error) throw error;
res.render('index', { title: 'Events', data: results });
});
});
router.post('/add', function (err, req, res) {
const query = "insert into event (title, description, event.date, subcategory_id, place_id, organisator_id) values ('" + req.body.title + "','" + req.body.description + "','" + req.body.date + "',(SELECT id from subcategory WHERE title = '" + req.body.subcategory + "'),(SELECT id from place WHERE title = '" + req.body.place + "'),(SELECT id from organisator WHERE title = '" + req.body.organisator + "'))";
connection.query(query, function (err) {
if (err) {
console.error(err);
throw err;
}
});
});
抱歉滾動,只有這樣的查詢。 找到了一些答案,該解析器應該在任何東西之前使用,但是我認為我沒有這樣的問題。 有我的應用程序文件。
const express = require('express');
const path = require('path');
const logger = require('morgan');
const bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(logger('dev'));
app.use(express.static(path.join(__dirname, 'public')));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
var mysql = require("mysql");
app.use(function(req, res, next){
res.locals.connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'Strange3865hum31315',
database : 'minskevents'
});
res.locals.connection.connect();
next();
});
app.use('/', require('./routes/index'));
app.use('/events', require('./routes/events'));
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
app.use(function(err, req, res, next) {
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
res.status(err.status || 500);
res.render('error');
});
var http = require('http');
var server = http.createServer(app);
server.listen(4000);
if(server.listening){
console.log('Server is listening on port 4000');
}
module.exports = app;
我從html表單獲取數據
<form action="/events/add" method="POST">
<input type="text" name="title" placeholder="Event name" />
<input type="text" name="subcategory" placeholder="Category" />
<input type="text" name="date" placeholder="Date" />
<input type="text" name="place" placeholder="Place" />
<input type="text" name="organisator" placeholder="Organisator" />
<textarea name="description" placeholder="Description" onkeyup="adjust_textarea(this)"></textarea>
<input type="submit" value="Add" />
</form>
express中的錯誤處理程序必須具有4個參數,而不是3個 。
因此,您的/add
路線:
router.post('/add', function (err, req, res) {
實際上是一條普通路由,第一個參數使用req
(請求)填充,第二個參數使用res
(響應)填充,第三個參數使用next
函數填充。 因為您將第二個參數命名為req
,所以創建了一個令人困惑的場景,其中req
是響應, err
是請求, res
是下一個函數。
因為響應沒有body
屬性,並且您已將響應命名為req
,所以您的req.body.title
試圖將屬性req.body.title
為未定義的值( body
)。 重命名您的參數req, res, next
,我想您會更好。
在get方法中,您將標題引用為event.title
但在帖子中將其引用為title
。 為什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.