TypeError:无法读取insertOne处insertDocuments处未定义的属性'_id'

时间:2018-06-23 03:24:00

标签: mongodb express

抛出该错误时,我试图将记录插入到集合中。我浏览了insertOne上的mongodb文档,并且我了解到mongod在未按我的情况指定时会自动添加_id,因此我想知道为什么会有未定义的id错误。

这是我正在使用的代码,首先是api路由和我要插入的数据

app.post('/api/contacts', (req, res) => {
// retrieve the user being added in the body of the request
const user = req.body;

// obtain a reference to the contacts collection
const contactsCollection = database.collection('contacts');

// insert data into the collection
contactsCollection.insertOne(user, (err, r) => {
    if (err) {
        return res.status(500).json({error: 'Error inserting new record.'});
    }

    const newRecord = r.ops[0];

    return res.status(201).json(newRecord);
});
});

要插入的json数据

{
"name": "Wes Harris",
"address": "289 Porter Crossing, Silver Spring, MD 20918",
"phone": "(862) 149-8084",
"photoUrl": "/profiles/wes-harris.jpg"
}

数据库成功连接到mlab上托管的数据库,没有错误。这里可能有什么问题,我该如何解决该错误?

2 个答案:

答案 0 :(得分:2)

该错误消息表示您要传递给insertOne的对象是未定义的(因此它无法读取其_id属性)。您可能想看看req.body到底包含什么,因为它是作为用户传递的。 (我不知道TypeScript,但是在节点/表达式中,当我没有正确设置bodyParser时遇到了这样的错误)

答案 1 :(得分:0)

遇到类似问题。通过使用body-parser进行解决,然后解析发送的json对象,如下所示:

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

app.use(bodyParser.json());

// parse application/json
app.use(function (req, res) {
  res.setHeader('Content-Type', 'text/plain')
  res.write('you posted:\n')
  res.end(JSON.stringify(req.body, null, 2))
})