mongoose.js服务器 - 查询数据的res.write不会将数据发送回客户端

时间:2012-11-17 21:31:45

标签: node.js mongoose

我正在尝试设置一个简单的mongoose测试服务器,该服务器读取Users集合中的用户并打印用户名。我似乎无法获得res.write,以便在客户端显示查询数据

var mongoose = require('mongoose');
var db = mongoose.createConnection('localhost', 'bugtraq');
var schema = mongoose.Schema({ username : 'string', email : 'string' });
var User = db.model('User', schema);

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});

    User.find().exec(function (err, users) {
        if(err) { res.write(err.message); }
        if(users) {
            users.forEach(function(u){
                console.log(u.username);
                return '<b>'+u.username+'</b>';
            });
        }
    });

    res.write('</body></html>');
    res.end();
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');

服务器端输出

<html><head></head><body></body></html>

我确实在控制台输出中看到了用户名

欢迎任何指示

1 个答案:

答案 0 :(得分:3)

你有两个问题。首先,mongoose查询是任意的,但是在查询实际发生之前你会在它的回调之外结束你的响应(我必须重新编写代码才能确保)。

要使其正常工作,您需要在User.find的回调函数中结束响应。

其次,你没有按照你的想法收集输出。这条线错了:

return '<b>'+u.username+'</b>';

你将return查找的输出变为空气。如果要在响应中返回它,则需要捕获它。

把它放在一起,它可能看起来像这样:

User.find().exec(function (err, users) {
    if(err) { res.write(err.message); }
    if(users) {
        // here make a buffer to store the built output ...
        var output = [];
        users.forEach(function(u){
            // (you saw this console output because this loop is happening, it's
            // just happening after your response has been ended)
            console.log(u.username);

            // ... then in each iteration of the loop, push to the buffer
            output.push('<b>'+u.username+'</b>');
        });
    }

    // finally, finish the response in the `find` callback.
    res.end(output.join() + '</body></html>');
});