我是mongodb和node.js的新手。 我有一个项目,我将mongodb代码放在路由中,我需要在我的server.js中。
现在在该模块中,我有一个方法将返回一个集合中的所有条目(它可以工作)。
我试图从server.js文件调用该函数,但我通常最终得到响应打印出函数,而不是执行它并返回输出!!
示例:
var http = require('http'),
location = require('./routes/locations');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write(location.findAll() + '');
response.end();
}).listen(8080);
现在,当我将UI指向8080时,我希望得到location.findall的输出,而不是我得到一个未定义的消息,并在节点中出现以下异常:
TypeError: Cannot call method 'send' of undefined
我知道这可能是一个新手问题,我来自java,.NET和iOS世界。遗憾!!
更新:为了澄清更多,这里是我在routes / locations.js
中的内容 var mongo = require('mongodb');
var Server = mongo.Server,
Db = mongo.Db,
BSON = mongo.BSONPure;
var server = new Server('localhost', 27017, {auto_reconnect: true});
db = new Db('locationsdb', server);
db.open(function(err, db) {
// initlization code
});
exports.findAll = function(req, res) {
db.collection('locations', function(err, collection) {
collection.find().toArray(function(err, items) {
res.send(items);
});
});
};
答案 0 :(得分:0)
findAll
是异步的,所以你应该以异步方式使用该功能我不知道你的route/locations
文件中有什么内容,但它可能看起来像这样:
var http = require('http'),
location = require('./routes/locations');
http.createServer(function (request, response) {
location.findAll(function(err, locations) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write(locations);
response.end();
});
}).listen(8080);
答案 1 :(得分:0)
我不确定,但请尝试
response.write(location.findAll() + '');