【问题标题】:ExpressJS breaking when trying to serve missing imagesExpressJS 在尝试提供丢失的图像时中断
【发布时间】:2018-03-07 20:59:21
【问题描述】:

ExpressJS 新手警告

我有一个使用 expressjs 运行的简单服务器,并且在所有图像都存在时一切正常。但是如果缺少图像,expressjs 会停止并出现以下错误

(node:5793) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Cannot find module 'jpg'

这会阻止加载任何其他内容,甚至阻止链接正常工作。页面只是挂在那里。不应该简单地不提供图像(发送 404)并且仍然允许站点工作吗?

更新

router.get('/*', (req, res, next) => {
    dynamicStatic.setPath(path.resolve(__dirname, 'public/templates/' + 
    app.get('templatePath')));
    res.render('index');
});

我使用 dynamicStatic 是因为我需要能够根据某些条件动态设置路径。这在引擎盖下设置了 express.static。我不认为这与它有任何关系,因为其他图像都很好。不过,我当然可能是错的。

更新 2 图像保持在(挂起)状态,这是挂断的来源。

此图显示了我在 Node/Express 中收到的错误消息。

【问题讨论】:

  • 你能展示你的代码吗?
  • 不提供图片(发送 404)并仍然允许网站正常工作难道不是很简单吗?是的。 :)
  • @Atef 在上面添加了一些代码 sn-p。

标签: node.js express


【解决方案1】:

我认为用try {} catch 块捕获异常应该可以很好地完成工作。

将可能抛出异常的代码放在try块中,如果抛出异常则发送404状态。

试试看:

router.get('/*', (req, res, next) => {
   try {
         dynamicStatic.setPath(path.resolve(__dirname, 'public/templates/' + 
         app.get('templatePath')));
         res.render('index');
     } catch(err) {
         res.sendStatus(404);
      }
});

【讨论】:

  • 不幸的是,事情并非如此简单。我用一些图片更新了上面的这张票。由于某种原因,图像仍处于(待处理)状态。
  • @selanac82 这些图片文件(1.jpg, 2.jpg, ....)真的存在于你的服务器上吗?
  • 我正在运行本地服务器。第一张图片是我的 chrome 开发工具,第二张是我在调试模式下运行服务器时在 webstorm 中收到的错误消息。
  • 不,我问的是您要求的图片,(1.jpg 等...)
  • 哈哈抱歉,时间还早。不,他们不在服务器上。它们不见了,但我的假设是,即使它们不见了,它们也应该返回 404,表示它们不存在。
猜你喜欢
  • 2020-09-16
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
相关资源
最近更新 更多