【发布时间】:2013-12-02 05:48:59
【问题描述】:
我正在玩弄所有花哨的 node.js/mongodb/express 平台,但偶然发现了一个问题:
app.get('/tag/:tag', function(req, res){
var tag=req.params.tag;
console.log('got tag ' + tag + '.');
catalog.byTag(tag,function(err,cursor) {
if(err) {
console.dir(err);
res.end(err);
} else {
res.writeHead(200, { 'Content-Type': 'application/json'});
//this crashes
cursor.stream().pipe(res);
}
});
});
您可能已经猜到了,catalog.byTag(tag, callback) 对 Mongodb 执行 find() 查询并返回光标
这会导致错误:
TypeError: first argument must be a string or Buffer
根据mongodb driver doc,
我试图将此转换器传递给stream():
function(obj) {return JSON.stringify(obj);}
但这无济于事。
谁能告诉我如何正确地将某些内容流式传输到响应中?
或者是唯一的解决方案是使用“数据”和“结束”事件手动抽取数据的样板?
【问题讨论】:
-
如果将catalog.byTag替换为直接调用MongoDB原生驱动,是否有效?
-
不,同样的错误。另外,我可以调用
toArray()并通过res.json()发送它,这是可行的,但我更喜欢流式传输而不是在服务器上缓冲然后再发送出去。