【发布时间】:2019-05-03 20:15:03
【问题描述】:
我在我的 express 服务器中有一个路由设置,它发送一个 post 请求并在我的 mongoDB 数据库中添加一条新消息。
当我将名称静态添加到正文字段时;即new userMessage = new Message({ name: 'Joseph', email: 'joseph@gmail.com', message: 'Hello Joseph'}),发帖成功。
但是当它是动态的;即new userMessage = new Message({ name: req.body.name, email: req.body.email, message: req.body.message}) 它会引发错误。
我已尝试多次调试该问题,但均未成功。
错误
TypeError: Cannot read property 'name' of undefined
at router.post (C:\Users\Joseph\Documents\Hackathons\hack.api\app\routes\message.js:13:24)
at Layer.handle [as handle_request] (C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\index.js:275:10)
at Function.handle (C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\index.js:174:3)
at router (C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\index.js:47:12)
at Layer.handle [as handle_request] (C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\index.js:317:13)
at C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\index.js:284:7
at Function.process_params (C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\express\lib\router\index.js:275:10)
at cors (C:\Users\Joseph\Documents\Hackathons\hack.api\app\node_modules\cors\lib\index.js:188:7)
Message.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const MessageSchema = new Schema({
name: { type: String, required: true },
email: { type: String, required: true },
message: { type: String, required: true }
});
module.exports = Message = mongoose.model('message', MessageSchema);
Server.js
const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const cors = require('cors');
const message = require('../routes/message');
const app = express();
//Enable cors
app.use(cors( {origin: '*' }));
//Connect to mongoose
mongoose.connect('mongodb://localhost/messages', { useNewUrlParser: true })
.then(() => console.log('MongoDB connected'))
.catch(err => console.log(err));
//Use routes
app.use('/message', message);
//Body Parser middleware
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
//Test route
app.get('/', (req, res) => {
res.send('Hello world');
})
//Set server port
const port = process.env.PORT || 5000;
app.listen(port, () => {
console.log(`Server started on port ${port}`);
});
message.js
const express = require('express');
const router = express.Router();
//Load message model
const Message = require('../models/Message');
router.get('/test', (req, res) =>
res.json({ msg: 'Message post route works' })
);
router.post('/post', (req, res) => {
const userMessage = new Message({
name: req.body.name,
email: req.body.email,
message: req.body.message
});
userMessage.save()
.then(message => res.json(message))
.catch(err => console.log(err))
});
module.exports = router;
【问题讨论】: