Node js & mongoDB - TypeError: db.collection is not a function

Posted

技术标签:

【中文标题】Node js & mongoDB - TypeError: db.collection is not a function【英文标题】: 【发布时间】:2017-11-19 22:08:09 【问题描述】:

我正在尝试将数据从 POSTMAN 发布到我在 mLab 上创建的外部数据库,但我收到错误 db.collection is not a function。

有一个类似的问题线程,但答案不完整,并且没有将我放入邮递员的任何键/值保存到 mLab。我正在尝试制作的代码来自本教程:https://medium.freecodecamp.com/building-a-simple-node-js-api-in-under-30-minutes-a07ea9e390d2

我的代码:

服务器.js

const express  = require('express'); // Load routes application
const MongoClient = require('mongodb').MongoClient; //Load database connection application
const db = require('./config/db');
const app  = express(); // Assign express app a variable
const port = 8000; //Set local port value for server
const bodyParser = require('body-parser'); // **This has to come BEFORE routes
var assert = require('assert'); // ?
var databaseURL ='mongodb://external:api@ds123312.mlab.com:23312/soundfactory';


app.listen(port, () => 
  console.log('')
  console.log('We are live on ' + port);
  console.log('')
);


MongoClient.connect(databaseURL, function(err, db) 
  assert.equal(null, err);
  console.log("API has succesfully connected to Sound Facotry mlab external database.");
  console.log('')
  db.close();
);


app.use(bodyParser.urlencoded( extended: true ))
require('./app/routes')(app, ); //Must come AFTER express w/ body parser

db.js

module.exports = 
  url : 'mongodb://external:api@ds123312.mlab.com:23312/soundfactory'
;

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(部分有效且不会像我原来的 server.js 文件那样抛出 db.collections 错误的代码)

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); 
);
)

【问题讨论】:

您将一个空对象从 server.js 传递给 index.js,然后传递给 note_routes.js 作为 db 参数,您尝试将其用作 db.collection 但 db 是空对象,它不会'没有集合属性。 尝试检查 package.json 中 mongodb 的依赖关系 【参考方案1】:

改成这个require('mongodb').MongoClient;

【讨论】:

【参考方案2】:

删除 node_modules 文件夹并更改 package.json 的 mongodb 版本

"mongodb": "^2.2.33"

并运行以下代码:

npm install

【讨论】:

以上是关于Node js & mongoDB - TypeError: db.collection is not a function的主要内容,如果未能解决你的问题,请参考以下文章

连接到 Heroku node.js 应用程序中的数据库,而不在 git 上显示身份验证详细信息

Vue+Node+MongoDB高级全栈开发

全栈高级工程师实战 Vue+Node+MongoDB

?? Mongoose?Node.js?MongodB ?????????????

MEAN 项目 - 组织

Node.js 监听 MongoDB 变化