我有这条明确的路线......
app.get('/:grp/:time', function(req, res){
var out = [];
var grp = grpmap[req.param('grp')];
var time = timemap[req.param('time')];
leveldb.createReadStream({start:'HEM!' + grp + '!' + time + '!', end:'HEM!' + grp + '!' + time + '!\xff', keys: false})
.on('data',function(data){
out.push(JSON.parse(data));
})
.on('close',function(){
res.send(out);
})
});
它按预期工作,但需要花时间填充,客户端在收到响应之前会停留几秒钟。必须有一个更好的方法..一些提示?
感谢名单。
答案 0 :(得分:0)
这需要很长时间,因为你在发送任何内容之前都要缓冲整个结果集。
您要做的是流式传输数据而不是缓冲。你会想要像JSONStream那样使用像这样的模块:
var JSONStream = require('JSONStream')
app.get('/route', function (req, res) {
db.createReadStream({...}).pipe(JSONStream.stringify()).pipe(res);
})
整个请求可能需要相同的时间,但您应该开始非常快速地接收数据,因为这不会等到所有结果都被缓冲后再发送任何内容。