我正在尝试在app.get函数中使用一个promise,它将运行一个将在promise上运行的查询。但问题是响应不等待承诺而只是回应。
任何想法代码应该如何承诺可以在快递应用程序中的app.get中生存?
答案 0 :(得分:22)
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
});
});
});
答案 1 :(得分:5)
以下是Express documentation的回答:
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()
,以便常见的错误处理路径可以将错误处理逻辑封装在下游。