【问题标题】:Node Express RESTful API default engine for error handling用于错误处理的 Node Express RESTful API 默认引擎
【发布时间】:2019-05-31 06:55:12
【问题描述】:

我正在开发一组使用 Node.js Express 构建的 RESTful API 服务,当它遇到错误时,会出现堆栈跟踪:

错误:没有指定默认引擎,也没有提供扩展。

我已经阅读了几篇关于在 app.js 中处理错误的预期代码的 Stack Overflow 文章:

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});

但是,对于默认引擎,StackOverflow 建议侧重于将 Vue 与 Jade 结合使用。

这是一个内部 RESTful API 服务,我不希望在 Jade 中添加默认引擎输出错误响应。

建议?

这是来自我的 RESTful API 服务的示例堆栈跟踪:

[09:22:42] info: GET /api/v1/archives/google/folders 401 130ms
Error: No default engine was specified and no extension was provided.
    at new View (/Users/jeff/github/jeff00/act-archive/node_modules/express/lib/view.js:61:11)
    at Function.render (/Users/jeff/github/jeff00/act-archive/node_modules/express/lib/application.js:570:12)
    at ServerResponse.render (/Users/jeff/github/jeff00/act-archive/node_modules/express/lib/response.js:1008:7)
    at /Users/jeff/github/jeff00/act-archive/app.js:137:7
    at Layer.handle_error (/Users/jeff/github/jeff00/act-archive/node_modules/express/lib/router/layer.js:71:5)

【问题讨论】:

    标签: node.js rest express error-handling


    【解决方案1】:

    您正在使用res.render 调用,因为Express 希望为应用程序设置一个渲染引擎。删除res.render 并执行res.json 之类的操作,不会出现此错误。

    【讨论】:

    • 嗨@faizuddin-mohammed。我之前尝试过使用res.json,由另一篇 StackOverflow 文章推荐,我收到警告:express deprecated res.json(status, obj): Use res.status(status).json(obj) instead,错误:Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client。感谢您的回复。
    • 哦,只需使用res.status(404).json(errObj) 并摆脱所有其他res.* 调用。
    • 嗨@faizuddin-mohammed。是的,在我的最后一条评论和您的评论之前,我曾尝试使用res.status(404).json(errObj),但是,我得到了[ERR_HTTP_HEADERS_SENT]
    • 您是否删除了另一个res.status 电话?
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    相关资源
    最近更新 更多