nodejs:TypeError:mongo.collection不是函数

时间:2016-12-04 22:46:06

标签: node.js mongodb

我是nodejs获取错误的新手。我想插入mongodb数据库的集合。请给我任何合适的解决方案或指导我。

TypeError:mongo.collection不是函数。     在服务器上。 (D:\ taha \ MultiChannelChatApp-master \ MultiChannelChatApp-master \ routes \ RegUser.js:30:34)
    在emitTwo(events.js:106:13)
    在Server.emit(events.js:191:7)
    在HTTPParser.parserOnIncoming [as oncoming](_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;

1 个答案:

答案 0 :(得分:0)

这一行可能会给您带来问题:

module.exports = exports;

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

通常,您将分配给module.exportsexports,但不能同时分配两者,除非您将其内联。

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

有时候,人们(特别是在较旧的模块中)会覆盖两者:

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

但这不再常见了。

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

exports.connectdb = function(callback){/ * stuff * /}

里面/ 东西 /你再次调用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);