koa-static转到下一个中​​间件

时间:2017-01-06 18:54:43

标签: node.js koa koa2

我有一台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()

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

谢谢!

2 个答案:

答案 0 :(得分: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中间件移动到文件的开头(它将控制第二个"冒泡"阶段。

请务必选中this

答案 1 :(得分:0)

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

    // 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)