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;
这里这条线可能导致您的问题:
module.exports = exports;
删除它,它应该解决您的错误。
通常,您将分配到module.exports
或exports
,但不能同时使用,除非您以内联方式执行它们。
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);
此行导致了问题:'VAR userCollection = mongo.collection( '用户' );'。文件“../db_mongo''里面有什么? – Thomas
再次检查新版本 – SDA