nodejs:TypeError:mongo.collection不是函数

问题描述:

我是新来的nodejs获取错误。我想插入到MongoDB数据库的集合中。请给我任何合适的解决方案或指导我这方面。nodejs:TypeError:mongo.collection不是函数

TypeError:mongo.collection不是函数。服务器上的 。 (events.js:191:00)在emitTwo(events.js:106:13)
(D:\ taha \ MultiChannelChatApp-master \ MultiChannelChatApp-master \ routes \ RegUser.js:30:34)
7)
在HTTPParser.parserOnIncoming [按onIncoming](_http_server.js:546:12)
在HTTPParser.parserOnHeadersComplete(_http_common.js:99:23)

var http = require('http'), 
fs = require('fs'), 
url = require('url'); 


// var db = require('../db'); 


var mongo = require('../db_mongo'); 


http.createServer(function(request, response){ 
var path = url.parse(request.url).pathname; 
var url_parts = url.parse(request.url, true); 
var query = url_parts.query; 
    var url_parts = url.parse(request.url, true); 
    var query = url_parts.query; 

var setval = {username: query.name, email: query.email, password: query.pass}; 
//  db.query('INSERT INTO users SET ?', setval, function (err, res) { 
//   if (err) 
//    throw err; 
// 
// }); 


if (mongo) {console.log("mongo connected here ss");} 

var userCollection = mongo.collection('users'); 

userCollection.insert((setval, function(err, result) { 
    if(err) { throw err; } 
    res.write("<p>Product inserted:</p>"); 
    res.end("<p>" + result[0].make + " " + result[0].model + "</p>"); 
})); 


    // db.collection('users').insertOne({ 
    //  username: query.name, email: query.email, password: query.pass 
    // }, function(err, result) { 
    //  assert.equal(err, null); 
    //  console.log("Inserted a document into users"); 
    //  callback(); 
    // }); 
// }; 

// insertDocument(db, function() { 
// }); 




}).listen(8001); 

db_mongo

var mongodb = require('mongodb'); 
var MongoClient = mongodb.MongoClient; 
var url_db = 'mongodb://localhost:27017/test'; 

exports.connectdb = function (callback) { 

module.exports = MongoClient.connect(url_db, function (err, db) { 
    if (err) { 
     console.log('Unable to connect to the mongoDB server. Error:', err); 
    } 
    if (!err) { 
     console.log('Connection established to', url_db); 
     return db; 
    } 
}); 
} 
module.exports = exports; 
+0

此行导致了问题:'VAR userCollection = mongo.collection( '用户' );'。文件“../db_mongo''里面有什么? – Thomas

+0

再次检查新版本 – SDA

这里这条线可能导致您的问题:

module.exports = exports;

删除它,它应该解决您的错误。

通常,您将分配到module.exportsexports,但不能同时使用,除非您以内联方式执行它们。

exports是如果要导出命名函数,module.exports是如果您希望整个模块是您定义的函数或对象。

有时候,人们(尤其是在旧的模块)将覆盖都喜欢:

module.exports = exports = function(){ /* whatever */ } 

但这是少了很多常见了。

此外,由于某种原因,您的整个文件正在导出功能内部导出。注意你正在做的:

exports.connectdb =函数(回调){/ *东西* /}

其中内/ 东西 /你再打电话给module.exports ...

如果你这样做:

console.log(require('../db_mongo'));在调用代码中,你可能会看到它所有的东西都是连接到exports对象的connectdb函数。

此外,您不清楚您是否了解节点的异步风格,从您在第一块代码中调用的代码中了解。

如果你的db_mongo.js试图包装驱动程序的连接,以便你可以把你的连接字符串放进去,但是你仍然需要把它当作一个异步函数。

db_mongo可能是这个样子:

var mongodb = require('mongodb'); 
var MongoClient = mongodb.MongoClient; 
var url_db = 'mongodb://localhost:27017/test'; 

module.exports = function(callback) { 
    MongoClient.connect(url_db, callback); 
}); 

然后调用代码将是:

var http = require('http'), 
fs = require('fs'), 
url = require('url'); 

var mongo = require('../db_mongo'); 


http.createServer(function(request, response){ 
    var path = url.parse(request.url).pathname; 
    var url_parts = url.parse(request.url, true); 
    var query = url_parts.query; 
    var url_parts = url.parse(request.url, true); 
    var query = url_parts.query; 

    var setval = {username: query.name, email: query.email, password: query.pass}; 

    // The ../db_mongo.js file is now exporting a function that takes a callback; usage of the database has to happen inside that callback 
    mongo(function(err, db){ 
     var userCollection = db.collection('users'); 

     userCollection.insert(setval, function(err, result) { 
      if(err) { res.send(err); } 
      res.write("<p>Product inserted:</p>"); 
      res.end("<p>" + result[0].make + " " + result[0].model + "</p>"); 
     }); 
    }); 


}).listen(8001); 
+0

同样的错误:TypeError:mongo.collection不是函数 – SDA

+0

对不起,刚才在手机上刚刚意识到这个文件有多大的混乱。一秒钟,我会编辑。 – Paul

+0

即使mongo对象不为null它表明mongo.collection不是函数 – SDA