2015-07-10 161 views
2

我想上的Node.js和貓鼬MongoDB的使用快遞,但使用郵差得到的數據做一個POST請求給了我這個錯誤:貓鼬驗證錯誤

Error
   at MongooseError.ValidationError (C:\Users\Matteo\Desktop\app1\node_modules\mongoose\lib\error\validation.js:22:16)
   at model.Document.invalidate (C:\Users\Matteo\Desktop\app1\node_modules\mongoose\lib\document.js:1162:32)
   at C:\Users\Matteo\Desktop\app1\node_modules\mongoose\lib\document.js:1037:16
   at validate (C:\Users\Matteo\Desktop\app1\node_modules\mongoose\lib\schematype.js:651:7)
   at C:\Users\Matteo\Desktop\app1\node_modules\mongoose\lib\schematype.js:679:9
   at Array.forEach (native)
   at SchemaString.SchemaType.doValidate (C:\Users\Matteo\Desktop\app1\node_modules\mongoose\lib\schematype.js:656:19)
   at C:\Users\Matteo\Desktop\app1\node_modules\mongoose\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) 
}) 

任何人都可以幫助我或它是貓鼬的問題?

+2

是'req.body'與'username'和'body'一個實際的對象?我發現你缺少包含'bodyParser'中間件,如:app.use(bodyParser.json());'line ,. – bardzusny

+0

'console.log(req.body)'輸出到控制檯是什麼? – royhowie

+0

@royhowie只是這兩個括號{} – MatteoP

回答

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。嘗試審查你的貓鼬模型。

0

今天我收到類似的錯誤,並閱讀文檔幫助我通過。

的醫生說:

Defining validators on nested objects in mongoose is tricky, because nested objects are not fully fledged paths.

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