0

我有一个 koa 2 服务器。

以下代码是我的中间件:

// parse body
app.use( bodyParser() )

// serve static
app.use( serve( path.join(__dirname, '/public') ) )

// routes
app.use( routes )

// error middleware
app.use( async ctx => ctx.throw(500) )

一切正常,但我的问题是,当我转到服务器所在的localhost:8000时,在控制台中我看到以下错误:

InternalServerError:Object.throw 的内部服务器错误(/Users/work/Desktop/server/node_modules/koa/lib/context.js:91:23)

我怀疑在静态之后,应用程序将进入下一个中间件,即错误中间件。

PS。如果我在其他路线上遇到错误,我正在使用app.use( async ctx => ctx.throw(500) ), 来调用。next()

有谁知道如何解决这一问题?

谢谢!

4

2 回答 2

0

使用like,你添加一个中间件来正确处理你的自定义错误......

    // serve static
app.use(serve(path.join(__dirname, '/public')))
// error middleware
app.use(async(ctx, next) => {
    try {
        await next();
    } catch (e) {
        console.log(e.message);
        ctx.body = e.message
    } finally {}
})
// routes
app.use(router.routes()).use(router.allowedMethods());

router.get('/a', ctx => {
    try {
        ctx.body = "sadsa"
    } catch (e) {
        ctx.body = e
        console.log(e);
    } finally {}
});
app.use(ctx => ctx.throw(500))
app.listen(7000)
于 2017-08-03T19:37:31.057 回答
0

我怀疑在静态之后,应用程序将进入下一个中间件,即错误中间件。

koa-static通过设计将控制权转移到下一个中​​间件。你的routes中间件也await给下一个中间件。所以你得到一个错误。

有谁知道如何解决这一问题?

很难说你首先要实现什么。手动设置 500 可能是一个错误的想法。应该有 404 像:

// 404 middleware
app.use(async ({response}, next) => {
  if (!this.body) {
    response.status = 404
    response.body = "Not Found" // or use template   
  }
  await next() // send control flow back (upstream)
})

对于 SPA(没有 SSR),您可能希望这个包罗万象的路由来发送 APP 布局。并将该404中间件移动到文件的开头(它将控制第二个“冒泡”阶段。

确保你检查了这个

于 2017-04-03T08:31:17.157 回答