我正在尝试使用node.js上的express和mongoose为mongoDB执行POST请求但是使用Postman获取数据会给我这个错误:
MongooseError.ValidationError出错 (C:\ Users \用户利玛\桌面\ APP1 \ node_modules \猫鼬\ lib中\错误\ validation.js:22:16)
在model.Document.invalidate (C:\ Users \用户利玛\桌面\ APP1 \ node_modules \猫鼬\ lib中\ document.js:1162:32)
在 C:\ Users \用户利玛\桌面\ APP1 \ node_modules \猫鼬\ lib中\ document.js:1037:16
在验证 (C:\用户\利玛\桌面\ APP1 \ node_modules \猫鼬\ lib中\ schematype.js:651:7)
在 C:\ Users \用户利玛\桌面\ APP1 \ node_modules \猫鼬\ lib中\ schematype.js:679:9
在Array.forEach(native)
在 SchemaString.SchemaType.doValidate (C:\用户\利玛\桌面\ APP1 \ node_modules \猫鼬\ lib中\ schematype.js:656:19)
在 C:\ Users \用户利玛\桌面\ APP1 \ node_modules \猫鼬\ lib中\ document.js:1035:9
at 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)
})
任何人都可以帮助我,或者这是猫鼬的问题吗?
答案 0 :(得分:0)
我认为它是Mongoose Validation问题,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模型。
答案 1 :(得分:0)
我今天遇到了类似的错误,阅读文档帮助我完成了。
医生说:
在mongoose中定义嵌套对象的验证器很棘手,因为嵌套对象不是完全成熟的路径。
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
}
});
答案 2 :(得分:0)
在Postman中,要使用原始JSON数据测试HTTP发布操作,需要选择raw选项并设置标头参数(在postman中选择标头参数,然后添加 key:value 字段,如下)。
Content-Type: application/json
默认情况下,它带有 Content-Type: text/plain
,需要替换为Content-Type: application/json