Node.js,mongodb返回函数的字符串表示,而不是输出

时间:2013-05-15 18:56:34

标签: node.js mongodb

我是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);
     });
  });
 };

2 个答案:

答案 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() + '');