0

我有一个简单的 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 将其作为解决方案接收。

任何帮助将不胜感激!

--

控制器对路由的响应是一个冗长的对象

4

1 回答 1

0

因为我看不到你是如何实现errorHandler()的。我能想到的你应该寻找的一件事是 - 如果在被调用的 Promise 的 .catch(err){} 内你没有返回任何错误,它将转到调用函数的 then 。

于 2019-09-09T23:04:52.447 回答