2017-01-06 6 views
0

私はkoa 2サーバを持っています。次のミドルウェアに行くkoa-static

次のコードは、私のミドルウェアです:

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

すべてがうまく動作しますが、私の問題は、私はローカルホストに行くときということです:8000、私のサーバーは、住んでいる場所、コンソールに私は次のエラーを参照してください。

InternalServerError: Internal Server Error at Object.throw (/Users/work/Desktop/server/node_modules/koa/lib/context.js:91:23)

私は静的な後に、アプリケーションはエラーミドルウェアである次のミドルウェアに行くと思っています。

PS。私はapp.use(async ctx => ctx.throw(500))を使用しています。他のルートでエラーが発生した場合はnext()に電話してください。

誰でもこれを解決する方法を知っていますか?

ありがとうございます!

+0

は、あなたはまだありません – saadq

+0

?問題を持っていますが、私は[OK]を、単に問題から来ていたところだ確認して – Anderson

+0

こと。あなたが 'あなたを共有することができます必要がありますルートコード? – saadq

答えて

0

I'm suspecting that after static, the app is going to the next middleware, which is the error middleware.

koa-staticは、設計上次のミドルウェアに制御を移します。 お客様のroutesミドルウェアもawaitから次のミドルウェアまでです。 エラーが発生します。

Does anyone know how to fix this?

最初に達成しようとしていることは言うまでもありません。 手動で500に設定するのはおそらく間違った考えです。

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

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) 
+0

あなたはあなたが何であるか説明してもらえますか? OPとは違ったやり方をしています。常に教えの瞬間があり、微妙に異なるこの問題に遭遇する他の人を助けるでしょう。 –

関連する問題