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中,那个database
variables实际上是你试图用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) => { ...