我正在玩弄所有花哨的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); } }); });
您可能已经猜到了,对Mongodb catalog.byTag(tag, callback)进行find()查询并返回游标
catalog.byTag(tag, callback)
find()
这会导致错误:
TypeError: first argument must be a string or Buffer
根据mongodb驱动程序doc,我试图将此转换器传递给stream():
stream()
function(obj) {return JSON.stringify(obj);}
但这无济于事。
谁能告诉我如何正确地将某些内容发送给响应?
还是唯一的解决方案是使用’data’和’end’事件手动抽取数据的样板?
这里的其他答案的工作组合
app.get('/comments', (req, res) => { Comment.find() .cursor() .pipe(JSONStream.stringify()) .pipe(res.type('json')) })
http://mongoosejs.com/docs/api.html#query_Query- cursor
cursor()
query.stream()
JSONStream.stringify()
res.type('json')
Content-Type
application/json