我是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;
答案 0 :(得分:0)
这一行可能会给您带来问题:
module.exports = exports;
删除它,它应该可以解决您的错误。
通常,您将分配给module.exports
或exports
,但不能同时分配两者,除非您将其内联。
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);