我有一台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()
。
有谁知道如何解决这个问题?
谢谢!
答案 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)