tech.chakapoko.com
Home / Node.js / Express

[Node.js][Express]Promiseやasync/awaitを利用する

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');
});