错误:
(节点:10164)UnhandledPromiseRejectionWarning:ValidationError: 产品验证失败:OEM:路径
oem
是必需的。类别: 路径category
是必需的。 在新的ValidationError(C:\ Projects \ React \ ninjas \ neo \ node_modules \ mongoose \ lib \ error \ validation.js:30:11) 在model.Document.invalidate(C:\ Projects \ React \ ninjas \ neo \ node_modules \ mongoose \ lib \ document.js:1957:32) 在p.doValidate.skipSchemaValidators(C:\ Projects \ React \ ninjas \ neo \ node_modules \ mongoose \ lib \ document.js:1825:17) 在C:\ Projects \ React \ ninjas \ neo \ node_modules \ mongoose \ lib \ schematype.js:839:9 在_combinedTickCallback(内部/进程/next_tick.js:131:7) 在process._tickCallback(内部/进程/next_tick.js:180:9)(节点:10164)UnhandledPromiseRejectionWarning:未处理的承诺 拒绝。该错误是由抛出异步内部引起的 没有捕获块或拒绝承诺 未使用.catch()处理。 (拒绝ID:1)(节点:10164)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。在 未来,未处理的承诺拒绝将终止 具有非零退出代码的Node.js进程。
//Product.js(model)
const mongoose = require('mongoose');
const ProductSchema = new mongoose.Schema({
oem: {
type: String,
required: true
},
category: {
type: String,
required: true
},
date: {
type: Date,
default:Date.now
}
});
module.exports = Product = mongoose.model('product', ProductSchema);
//product.js(routes)
const express = require('express');
const router = express.Router();
var Product = require('../models/Product');
router.get('/', (req, res) => {
Product.find()
.sort({ date: -1 })
.then(prods => res.json(prods));
});
router.post('/newpro', (req, res) => {
const newProduct = new Product({
oem: req.body.oem,
category: req.body.category
});
newProduct.save().then(prods => res.json(prods));
});
router.delete('/:id', (req, res) => {
Product.findById(req.params.id)
.then(prods => prods.remove().then(() => res.json({ success: true })))
.catch(err => res.status(404).json({ success: false }));
});
module.exports = router;
答案 0 :(得分:1)
router.post('/newpro', (req, res) => {
const newProduct = new Product({
oem: req.body.oem,
category: req.body.category
});
newProduct.save().then(prods => res.json(prods));
});
您正在从oem
请求的正文中获取category
和HTTP POST
的值。
由于req.body.oem
或req.body.category
之一是null
,因此引发了错误。
我不知道您是如何模拟HTTP REQUEST
的,但请仔细检查,
如果您的HTTP REQUEST
对您来说不错,我有第二个猜测,发现您没有使用body-parser middleware
,请记住,req.body
默认为undefined
。
从文档中
要求正文。
包含在请求正文中提交的键/值数据对。通过 默认情况下,它是未定义的,并且在使用body-parsing时填充 中间件,例如body解析器和multer。
所以也许将您的代码更改为以下代码可能会解决您的问题:
//product.js(routes)
const express = require('express');
const router = express.Router();
var bodyParser = require('body-parser');
var Product = require('../models/Product');
router.use(bodyParser.json()); // for parsing application/json
router.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
// rest of the code
但是在这种情况下,当您访问oem
或category
时,它应该引发错误,因为req.body
是undefined by default
。如果您有更多信息,请告诉我们。