Promiseで実行されるクエリを実行するapp.get関数内でpromiseを使用しようとしています。しかし問題は、応答が約束を待たずに応答することです。
約束がapp.get内でエクスプレスアプリ内に存在できるようにコードをどのようにすべきか考えていますか?
app.get('/test', function (req, res) {
db.getData()
.then(function (data) {
res.setHeader('Content-Type', 'text/plain');
res.end(data);
})
.catch(function (e) {
res.status(500, {
error: e
});
});
});
エクスプレスドキュメント からの回答は次のとおりです。
_app.get('/', function (req, res, next) {
// do some sync stuff
queryDb()
.then(function (data) {
// handle data
return makeCsv(data)
})
.then(function (csv) {
// handle csv
})
.catch(next)
})
app.use(function (err, req, res, next) {
// handle error
})
_
これは主にnext
を.catch()
に渡すことで注目に値します。これにより、一般的なエラー処理ルートがエラー処理ロジックをダウンストリームにカプセル化できます。