2013-08-30 45 views
6

我收到错误“TypeError:无法读取未定义的属性'_id'在简单的发布请求上将文档保存到名为books, 的集合中我的负载看起来像这样:TypeError:无法读取未定义的属性'_id'

{ 
    "name": "practical view", 
    "author": "DN", 
    "location": "room 50" 
} 

而我只是在做我的路线中的db.books.save()快递。 由于我没有通过身份证,这应该是理想的工作,但不是在这种情况下。

以下是完整的错误转储我我的节点服务器上获得:

C:\NodeProjects\ExpressTutorial\Library\node_modules\mongojs\node_modules\mongodb\lib\mongodb\mongo_client.js:411 
      throw err 
       ^
TypeError: Cannot read property '_id' of undefined 
    at Collection.save (C:\NodeProjects\ExpressTutorial\Library\node_modules\mongojs\node_modules\mongodb\lib\mongodb\collection.js:393:15) 
    at C:\NodeProjects\ExpressTutorial\Library\node_modules\mongojs\index.js:203:65 
    at apply (C:\NodeProjects\ExpressTutorial\Library\node_modules\mongojs\node_modules\thunky\index.js:16:28) 
    at C:\NodeProjects\ExpressTutorial\Library\node_modules\mongojs\node_modules\thunky\index.js:20:25 
    at Db.collection (C:\NodeProjects\ExpressTutorial\Library\node_modules\mongojs\node_modules\mongodb\lib\mongodb\db.js:488:44) 
    at C:\NodeProjects\ExpressTutorial\Library\node_modules\mongojs\index.js:268:7 
    at apply (C:\NodeProjects\ExpressTutorial\Library\node_modules\mongojs\node_modules\thunky\index.js:16:28) 
    at C:\NodeProjects\ExpressTutorial\Library\node_modules\mongojs\node_modules\thunky\index.js:20:25 
    at C:\NodeProjects\ExpressTutorial\Library\node_modules\mongojs\index.js:300:4 
    at C:\NodeProjects\ExpressTutorial\Library\node_modules\mongojs\node_modules\mongodb\lib\mongodb\mongo_client.js:408:11 
31 Aug 00:14:30 - [nodemon] app crashed - waiting for file changes before starting... 
+1

发布代码抛出的代码 – soulcheck

回答

8

确保NPM安装身体的解析器,再加入

var bodyParser = require('body-parser');

app.use(bodyParser());

你的代码的顶部。这也假设您正在使用Express。

+1

你能解释为什么这样可以解决问题吗? – Will

+0

因为您需要使用body-parsing中间件来填充req.body。否则,你将无法解析响应。 –

4

请试试这个:

var bodyParser = require('body-parser'); 

app.use(bodyParser.json()); 

app.use(bodyParser.urlencoded({ extended: true })); 
+2

请添加一些解释。谢谢! – Sampada

+0

身体分析器构造函数已被Express 4弃用。来源:http://stackoverflow.com/questions/24330014/bodyparser-is-deprecated-express-4 –

0

即使有这个问题的答案,另一种解决方案是在node.json检查您的快递JS的版本。在我自己的情况下,我将版本从3.x切换到4.x,足以摆脱这个错误。我希望它能帮助别人。

相关问题