node.js - 长级别升级查询

标签 node.js express leveldb

我有这条快速路线...

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);
    })
});

它按预期工作,但需要很长时间才能填充出来,客户端在收到响应之前需要等待几秒钟。必须有更好的方法......有什么提示吗?

谢谢。

最佳答案

这需要很长时间,因为您在发送任何内容之前都会缓冲整个结果集。

您想要做的是流式传输数据而不是缓冲。您需要使用类似 JSONStream 的模块像这样:

var JSONStream = require('JSONStream')

app.get('/route', function (req, res) {
  db.createReadStream({...}).pipe(JSONStream.stringify()).pipe(res);
})

整个请求可能需要相同的时间,但您应该很快开始接收数据,因为这不会等到所有结果都已缓冲后再发送任何内容。

关于node.js - 长级别升级查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22442098/

相关文章:

node.js - node-forever 似乎没有按我的预期工作

node.js - "No listeners detected"验证错误 Mongoose 和 Mocha

javascript - levelDB 是否仍然损坏数据?

jms - KahaDB 和 LevelDB - 真正的区别是什么?

node.js - Node express & pg-promise - db.any 不是函数

javascript - 无法启动Azure中托管的nodejs Web api

node.js - 当浏览器请求 "element.html"时,使用 Express 提供编译后的 Jade

database - levelDB 数据库的多个实例同时存在

javascript - 如果花费的时间太长,NodeJS 函数会超时吗?

javascript - 基于 api key 的 Node JS Web 服务