ExpressでPromiseやasync/awaitを利用する時はエラーが発生した場合、明示的に next
を呼び出す必要があります。
next
を呼び出さないとエラーが発生した時にそのエラーがエラーハンドラによって処理されません。
const express = require('express');
const app = express();
const sleep = (millis) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve()
}, millis);
});
};
app.get('/', (req, res, next) => {
(async () => {
await sleep(1000);
res.send('hello');
})().catch(next);;
});
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Internal Server Error');
});
app.listen('3000', () => {
console.log('Application started');
});