【问题标题】:Node.js Express - Handle Error Differently Based on Error TypeNode.js Express - 根据错误类型以不同方式处理错误
【发布时间】:2015-09-24 05:10:10
【问题描述】:

一些细节...我使用 Express 4、Node 0.12.2 和 Express-Handlebars 作为我的视图引擎。

我正在尝试通过 AJAX 调用呈现部分,并希望以不同的方式处理不同的错误类型。在回调调用中传递的 err 对象似乎没有太多有用的信息可供使用,只是一条错误消息。我这里有什么遗漏吗?

// Search (Partial)
router.get('/search-products', function (req, res, next) {
    res.render('partials/search/products', {layout: 'ajax'}, function(err, html){
        if(err) {
            // return res.status(404).send(err);
            // return res.status(500).send(err);
        }
        res.send(html);
    });
});

【问题讨论】:

  • 可能是这样的? if(res.statusCode == 404) res.status(404).send(err);
  • 我不相信错误对象有状态码,但我会仔细检查。
  • @rtc11 这将检查响应是否已经将状态码设置为 404,然后再次将其设置为 404。

标签: ajax node.js express error-handling handlebars.js


【解决方案1】:

该错误对象不会有状态码,因为它是由视图引擎生成的错误对象。如果填充了该错误,您几乎可以假设它是 500 错误,因为视图引擎由于某种原因无法编译视图。

例如,如果您使用 Jade,如果您尝试让 Jade 编译具有无效 Jade 语法的模板,则会填充该错误对象。那里的错误永远不会与 HTTP 相关,这意味着它始终只是服务器端错误,状态码 500 就足够了。

【讨论】:

  • 是的,我最终像你说的那样做,发回了一个 500 代码,但我想仔细检查是否有任何方法可以区分编译错误和缺少模板之类的东西。好像没有。谢谢!
  • 不,我认为只有消息是唯一的表达方式。如今,404 代码通常是关于丢失的路由而不是丢失的文件,因为假定文件存在并且如果不存在则被认为是服务器错误,但是如果您真的希望路由能够返回 404如果缺少模板,只需先使用fs.exists 手动检查即可:)
猜你喜欢
  • 2013-03-20
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 2014-12-15
  • 2016-12-29
  • 1970-01-01
相关资源
最近更新 更多