Express.js + Mongo:TypeError:无法读取未定义

时间:2018-03-23 16:09:23

标签: node.js database mongodb express

我知道这里有其他问题询问同样的错误,但我找不到具体的情况。

我尝试连接mongo数据库:

var dbConn = MongoClient.connect('mongodb://localhost', function (err, client) {
  if (err) throw err;
  var db = client.db('mytestingdb');
});

我在这部分代码中收到错误:

app.post('/thanks', function(req, res) {
  if (atendees.checkin === req.body.dbstring) {
    dbConn.then(function(db) { //error here
      delete req.body._id; 
      db.collection('feedbacks').insertOne(req.body);
    })

    res.redirect('/thanks.html')
  }
(...)

我们的想法是将表单发送到数据库

我试着在这里遵循这个教程:

https://programmingmentor.com/post/save-form-nodejs-mongodb/

但他尝试连接服务器的方式:

var dbConn = mongodb.MongoClient.connect('mongodb://localhost:27017');

还给我一个错误(db.collection不是函数)。从我在StackOverflow中看到的,这是因为我的Mongodb版本。但是我怎样才能将其翻译成新版本?

1 个答案:

答案 0 :(得分:1)

在mongodb 3.0中,你可以这样做:

const MongoClient = require('mongodb').MongoClient;

MongoClient.connect(url).then(client => {
    const db = client.db(dbName);
    // write code that uses the db here
    db.collection(...).insertOne(...).then(...);
}).catch(err => {
    // error connecting here
});

此示例取自3.0 doc页面:http://mongodb.github.io/node-mongodb-native/3.0/reference/ecmascriptnext/connecting/

这里有很多其他的ES7示例:http://mongodb.github.io/node-mongodb-native/3.0/reference/ecmascriptnext/crud/应该可以在当前版本的node.js中使用。