Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript POST请求中的Mongoose验证错误_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript POST请求中的Mongoose验证错误

Javascript POST请求中的Mongoose验证错误,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我正在尝试使用node.js上的express和mongoose for mongoDB执行POST请求,但使用Postman获取数据会导致以下错误: MongooseError.ValidationError处出现错误 (C:\Users\Matteo\Desktop\app1\node\u modules\mongoose\lib\error\validation.js:22:16) 在model.Document.invalidate处 (C:\Users\Matteo\Desktop\a

我正在尝试使用node.js上的express和mongoose for mongoDB执行POST请求,但使用Postman获取数据会导致以下错误:

MongooseError.ValidationError处出现错误
(C:\Users\Matteo\Desktop\app1\node\u modules\mongoose\lib\error\validation.js:22:16)
在model.Document.invalidate处 (C:\Users\Matteo\Desktop\app1\node\u modules\mongoose\lib\document.js:1162:32)
在 C:\Users\Matteo\Desktop\app1\node\u modules\mongoose\lib\document.js:1037:16
在验证时 (C:\Users\Matteo\Desktop\app1\node\u modules\mongoose\lib\schematype.js:651:7)
在 C:\Users\Matteo\Desktop\app1\node\u modules\mongoose\lib\schematype.js:679:9
at Array.forEach(本机)
at SchemaString.SchemaType.doValidate (C:\Users\Matteo\Desktop\app1\node\u modules\mongoose\lib\schematype.js:656:19)
在 C:\Users\Matteo\Desktop\app1\node\u modules\mongoose\lib\document.js:1035:9
在进程中调用(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的问题吗?

我认为这是mongoose验证问题,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中的嵌套对象上定义验证器很棘手,因为嵌套对象不是完全成熟的路径

类似于上面的模式将抛出类似于您的问题中的错误

这些文件指出了解决办法:

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

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

来源:

在Postman中,要使用原始JSON数据测试HTTP post操作,需要选择raw选项并设置头参数(在Postman中选择头参数并在下面给出的add-in键:value-feild)


默认情况下,它附带了
内容类型:text/plain
,需要替换为
内容类型:application/json

req.body
具有
用户名和
body
的实际对象吗?我发现您缺少
bodyParser
中间件,如:
app.use(bodyParser.json())行,.
console.log(req.body)
打印到控制台的内容是什么?@royhowie只有这两个括号{}如果添加这行怎么办:
app.use(bodyParser.urlencoded({extended:true}))
@royhowie nothing,给我相同的错误,如果我执行GET请求,一切正常
var nameSchema = new Schema({
  first: String,
  last: String
});

personSchema = new Schema({
  name: {
    type: nameSchema,
    required: true
  }
});
Content-Type: application/json