Koa安全地处理错误吗?

时间:2014-12-17 18:27:51

标签: node.js koa

Nodejs API州......

  

就如何在JavaScript中使用throw的本质而言,几乎就是这样   从来没有任何方法安全地“拿起你离开的地方”,没有泄漏   引用,或创建一些其他类型的未定义的脆弱状态。

然而,Koa会捕获错误并避免退出nodejs进程。是什么让Koa安全地藐视这个建议?

1 个答案:

答案 0 :(得分:1)

主要有两种情况,koa无法安全地处理错误。

不同刻度线上的抛出错误:

app.use(function* () {
  setImmediate(function () {
    throw new Error('boom')
  })
})

未设置为response.body=的发射器错误:

app.use(function* () {
  this.response.body = stream.pipe(zlib.createGzip())
})

执行第一种情况的任何函数或库都是格式错误的,不应使用。如果函数/库正确使用promises和/或回调,它将永远不会发生。

对于发射器,只需将每个流设置为正文(或使用中间件):

 app.use(function* () {
  this.response.body = stream
  this.response.body = this.response.body.pipe(zlib.createGzip())
})

Koa通过允许你在" async"上使用try / catch来做到这一点。东西,特别是回调和承诺。但是,您无法尝试/捕获在不同的刻度线或发射器上抛出的错误。