POST请求上的Mongoosevalidation错误

我试图做一个POST请求使用express.js和mongoose上的mongoDB,但使用Postman获取数据给我这个错误:

错误
在MongooseError.ValidationError(C:\ Users \ Matteo \ Desktop \ app1 \ node_modules \ mongoose \ lib \ error \ validation.js:22:16)
在model.Document.invalidate(C:\ Users \ Matteo \ Desktop \ app1 \ node_modules \ mongoose \ lib \ document.js:1162:32)
在C:\ Users \ Matteo \ Desktop \ app1 \ node_modules \ mongoose \ lib \ document.js:1037:16
(C:\ Users \ Matteo \ Desktop \ app1 \ node_modules \ mongoose \ lib \ schematype.js:651:7)
在C:\ Users \ Matteo \ Desktop \ app1 \ node_modules \ mongoose \ lib \ schematype.js:679:9
在Array.forEach(native)
在SchemaString.SchemaType.doValidate(C:\ Users \ Matteo \ Desktop \ app1 \ node_modules \ mongoose \ lib \ schematype.js:656:19)
在C:\ Users \ Matteo \ Desktop \ app1 \ node_modules \ mongoose \ lib \ document.js:1035:9
在process._tickCallback(node.js:355:11)

我在这里粘贴我的server.js文件

var express = require('express') var bodyParser = require('body-parser') var mongoose = require('mongoose'); var app = express() app.use(bodyParser.json()) mongoose.connect('mongodb://localhost/social', function(){ console.log('mongodb connected') }) var postSchema = new mongoose.Schema ({ username : { type: String, required: true }, body : { type: String, required: true }, date : { type: Date, required: true, default: Date.now} }) var Post = mongoose.model('Post', postSchema) app.get('/api/posts', function(req, res, next){ Post.find(function(err, posts){ if(err) { return next(err) } res.json(posts) }) }) app.post('/api/posts', function(req, res, next){ var post = new Post({ username : req.body.username, body : req.body.body }) post.save(function(err, post){ if(err){ return next(err) } res.json(201, post) }) }) app.listen(3000, function(){ console.log('Server listening on', 3000) }) 

任何人都可以帮助我,或者是mongoose的问题?

我认为这是Mongoosevalidation问题,req.body实际上是一个JSON格式的数据,console.log(req.body.username)返回用户名值。 一般来说,请尝试使用req.body,请在填写提交时填写必填字段。

 app.post('/api/posts', function(req, res, next){ var post = new Post(req.body); post.save(function(err, post){ if(err){ return next(err) } res.json(post) }) }) 

当用户无法填写必填字段时,最好处理MongooseError.ValidationError。 尝试审查你的mongoose模型。

今天我收到了一个类似的错误,阅读文档帮助我通过了。

该文件说:

在mongoose中定义嵌套对象的validation器是非常棘手的,因为嵌套对象不是完全成熟的path。

 var personSchema = new Schema({ name: { first: String, last: String } }); 

像上面的模式会抛出类似的错误,就像你的问题。

文档指出了解决方法:

 var nameSchema = new Schema({ first: String, last: String }); personSchema = new Schema({ name: { type: nameSchema, required: true } }); 

资料来源: http : //mongoosejs.com/docs/validation.html