TypeError:db.collection不是一个函数

我想发布数据,我已经创build了mLab数据库,我得到这个错误,但我不知道怎么回事。我也已经读过以前问这个问题的问题,但我无法解决我的错误我是新来的。 所以在这里,我发布了我正在尝试实现的代码,它取自本教程https://medium.freecodecamp.com/building-a-simple-node-js-api-in-under-30-minutes- a07ea9e390d2 。

server.js

const express = require('express'); const MongoClient = require('mongodb').MongoClient; const bodyParser = require('body-parser'); const db = require('./config/db'); const app = express(); const port = 8000; app.use(bodyParser.urlencoded({extened:true})); MongoClient.connect(db.url,(err,database) =>{ if (err) return console.log(err) require('./app/routes')(app,{}); app.listen(port,() => { console.log("We are live on"+port); }); }) 

db.js

 module.exports = { url : "mongodb://JayTanna:Jay12345@ds147510.mlab.com:47510/testing" }; 

index.js

 const noteroutes = require('./note_routes'); module.exports = function(app,db) { noteroutes(app,db); }; 

note_routes.js

 module.exports = function(app, db) { app.post('/notes', (req, res) => { const note = { text: req.body.body, title: req.body.title }; db.collection('notes').insert(note, (err, result) => { if (err) { res.send({ 'error': 'An error has occurred' }); } else { res.send(result.ops[0]); } }); }); }; 

在你的server.js中,你需要传递一个空对象,你需要传递数据库作为第二个参数,作为你的routes / index.js导出函数所期望的。

PFB更新server.js:

 const express = require('express'); const MongoClient = require('mongodb').MongoClient; const bodyParser = require('body-parser'); const db = require('./config/db'); const app = express(); const port = 8000; app.use(bodyParser.urlencoded({extened:true})); MongoClient.connect(db.url,(err,database) =>{ if (err) return console.log(err) //require('./app/routes')(app,{}); //check below line changed require('./app/routes')(app, database); app.listen(port,() => { console.log("We are live on"+port); }); }) 

所以我投了回答说,只是去了mongodb 2.2.33,因为我试了一下,它的工作,但后来我觉得很难降级解决问题,所以我find了解决scheme,让您保持版本> = 3.0。 如果有人发现这个问题,他们的问题没有通过一个空白的参考,如接受的答案,试试这个解决scheme。

当你运行..

 MongoClient.connect(db.url,(err,database) =>{ } 

在mongodb版本> = 3.0中,那个databasevariables实际上是你试图用database.collection('whatever')访问的对象的父对象。 要访问正确的对象,你需要引用你的数据库名称,对我来说是在做

 MongoClient.connect(db.url,(err,database) =>{ const myAwesomeDB = database.db('myDatabaseNameAsAString') myAwesomeDB.collection('theCollectionIwantToAccess') } 

这解决了我的错误,当运行我的node.js服务器,希望这有助于谁不只是想降级他们的版本。

(另外,如果你因为某种原因不知道你的数据库名称,只要做一个console.log(数据库),你会看到它作为一个对象属性)

错误在MongoDB库中。 尝试安装mongodb:2.2.33版本。 删除你的node_modules目录并添加

 "dependencies": { "mongodb": "^2.2.33"} 

然后

 npm install 

你在那里

 module.exports = function(app, db) { app.post('/notes', (req, res) => { const note = { text: req.body.body, title: req.body.title }; db.collection('notes').insert(note, (err, result) => { ... 

db – >客户端

 module.exports = function(app, client) { var db = client.db("name"); app.post('/notes', (req, res) => { const note = { text: req.body.body, title: req.body.title }; db.collection('notes').insert(note, (err, result) => { ...