我有一个简单的 node+express 应用程序,如果您访问某个页面,它会发出一些异步 http/get url 请求。这是为了简单地从数据库中获取一些数据,并将其发送到视图。路由使用标准的单独routes.js
文件进行处理。
routes.js
...
const bluebird = require('bluebird');
const promiseRequest = bluebird.promisify(require('request'));
Promise.all([
promiseRequest(`http://url1...`),
promiseRequest(`http://url2...`)
])
.then((promiseRes) => {
res.render(...); // loads the view for the client
})
.catch((err) => {
errorHandler(err, req, res); // to be handled by express middleware
});
http url 请求使用控制器文件处理,该文件对数据库进行查询,并返回值或错误。
controller.js
try {
const {rows, rowCount} = await db.query(findAllQuery);
return res.status(200).send({rows, rowCount});
} catch (error) {
return res.status(400).send({
"name": error.name,
"psql_error_code": error.code
});
}
控制器工作正常,但我故意输入了错误的 get url,以便控制器将res.status(400)...
对象返回到路由。无论我返回什么路线,承诺都会解决。我什至尝试返回 a new Error('Error description')
,但 promisify 将其作为解决方案接收。
任何帮助将不胜感激!
--
控制器对路由的响应是一个冗长的对象。