1

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

2 回答 2

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);
于 2013-05-15T19:00:47.920 回答
0

我不确定,但试试

response.write(location.findAll() + '');
于 2013-05-15T19:01:11.223 回答