节点JS中的unhandledPromiseRejectionWarning

时间:2018-11-05 12:14:36

标签: reactjs mongodb express

我正在关注这个有关YouTube的MERN教程。

这是Github链接,其中包含所有文件夹和代码。

https://github.com/bradtraversy/mern_shopping_list

到目前为止,与数据库的连接已建立,我可以使用Postman进行GET请求,但是当我尝试发送POST请求时收到以下错误消息。

unhandledPromiseRejectionWarning-项目验证失败:name:路径名是必需的。

相关代码是server.js

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const path = require('path');

const items = require('./routes/api/items');

const app = express();


app.use(bodyParser.json());

// DB Config
const db = require('./config/keys').mongoURI;

// Connect to Mongo
mongoose
.connect(db, {useNewUrlParser: true}) // Adding new mongo url parser
.then(() => console.log('MongoDB Connected...'))
.catch(err => console.log(err));

// Use Routes
app.use('/api/items', items);

// Serve static assets if in production
if (process.env.NODE_ENV === 'production') {
// Set static folder
app.use(express.static('client/build'));

app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
});
}



const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`Server started on port ${port}`));

这是路由的代码,/ routes / api / items

const express = require('express');
const router = express.Router();

 // Item Model
 const Item = require('../../models/Item');

// @route   GET api/items
// @desc    Get All Items
// @access  Public
 router.get('/', (req, res) => {
 Item.find()
 .sort({ date: -1 })
 .then(items => res.json(items));
  });

 // @route   POST api/items
 // @desc    Create An Item
 // @access  Public
 router.post('/', (req, res) => {
 const newItem = new Item({
 name: req.body.name
 });

 newItem.save().then(item => res.json(item));
 });

 // @route   DELETE api/items/:id
 // @desc    Delete A Item
 // @access  Public
 router.delete('/:id', (req, res) => {
 Item.findById(req.params.id)
 .then(item => item.remove().then(() => res.json({ success: true })))
 .catch(err => res.status(404).json({ success: false }));
 });

 module.exports = router;

这是怎么回事,看来这部分有错误:

 router.post('/', (req, res) => {
 const newItem = new Item({
 name: req.body.name
 });

或路径/路由。是我的智慧尽头。

我在这里添加Item.js代码:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// Create Schema
const ItemSchema = new Schema({
name: {
type: String,
required: true
},
date: {
type: Date,
default: Date.now
}
 });

module.exports = Item = mongoose.model('item', ItemSchema);

1 个答案:

答案 0 :(得分:1)

这是验证项目模型的猫鼬错误,似乎req.body.name为null / undefined或您的bodyparser没有针对您的用例进行正确设置。

这取决于您如何处理邮递员或您的bodyparser设置,请检查bodyparser文档以确保仅解析json主体,而不解析url。

检查您的邮递员使用表单数据而不是url编码的正文,并且您的请求中包含值application / json的Content-Type标头。

或者,您也可以通过添加

接受json和url编码
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({"extended":true}))