当前位置: 首页 > 面试题库 >

Node.js + Express.js应用程序的错误处理原理?

曾翰飞
2023-03-14
问题内容

与其他框架相比,Node.js +
Express.js应用程序中的错误报告/处理似乎有所不同。我理解它的工作原理是否正确?

A) 通过接收错误作为回调函数的参数来 检测 错误。例如:

doSomethingAndRunCallback(function(err) { 
    if(err) { … }
});

B) 通过调用next(err) 报告 MIDDLEWARE中的​​错误。例:

handleRequest(req, res, next) {
    // An error occurs…
    next(err);
}

C) 通过抛出错误来 报告 路由中的错误。例:

app.get('/home', function(req, res) {
    // An error occurs
    throw err;
});

d) 手柄 通过配置通过app.error自己的错误处理的错误()或使用通用连接错误处理程序。例:

app.error(function(err, req, res, next) {
    console.error(err);
    res.send('Fail Whale, yo.');
});

这四个原则是否是Node.js + Express.js应用程序中所有错误处理/报告的基础?


问题答案:

Node.js中的错误处理通常采用A)格式。大多数回调都将错误对象作为第一个参数或返回null

Express.js使用中间件,中间件语法使用B)和E)(如下所述)。

C)如果您问我,这是不好的做法。

app.get('/home', function(req, res) {
    // An error occurs
    throw err;
});

您可以轻松地将上面的内容重写为

app.get('/home', function(req, res, next) {
    // An error occurs
    next(err);
});

中间件语法在get请求中有效。

至于D)

(07:26:37 PM)tjholowaychuk:在3.x中删除了app.error

TJ刚刚确认app.error不赞成使用E

E)

app.use(function(err, req, res, next) {
  // Only handle `next(err)` calls
});

长度为4(4个参数)的任何中间件均被视为错误中间件。当一个呼叫next(err)建立连接并呼叫基于错误的中间件时。



 类似资料:
  • 问题内容: 说我有这段代码来分隔expressjs中的路由: 并要求在: 1)如何以最佳方式将数据库查询分为新文件? 即使我分开数据库逻辑,该文件也会变得很大。 2)什么是分隔路线的好方法?也许是单独的模块?然后要求他们都参加? 问题答案: 这里有一个类似的问题,您应该阅读:如何构建express.js应用程序? 1)您所有的查询逻辑都应放在模型中(例如,位于/ models中的模块) 2)将您的

  • 问题内容: 我已经阅读了一些在node.js中使用mysql的示例,并且对错误处理有疑问。 大多数示例都进行如下错误处理(为简便起见): 每次发生sql错误时,这都会导致服务器崩溃。我想避免这种情况并保持服务器运行。 我的代码是这样的: 我不确定这是否是处理它的最佳方法。我也想知道查询的块中是否应该有一个。否则,连接可能会保持打开状态并随着时间的推移逐渐建立。 我习惯了Java 或在这里可以“干净

  • 我试图在完全使用JavaConfig配置的Spring MVC应用程序中使用处理404错误。 Spring MVC版本为4.1.5 我读过这样的话: null SpringConfigurationInitializer 请注意,我正在使用 而且 MVC配置 存储配置 安全配置

  • 我试图用spring Boot开发一个应用程序。我被困在管理应用程序的异常/错误上。到目前为止,我有服务层和控制器,我已经创建了特定于服务类的异常。对于。(如)异常类是。服务抛出各自的。我被困在如何处理控制器中的异常/错误,如果那里有异常?特别针对api方法调用的格式不正确的输入。我正在读取控制器的输入。我应该把它包括在服务中吗? 所有服务异常都以500个内部应用程序错误的形式返回HTTP代码。我

  • 问题内容: 反正有一起禁用laravel错误处理程序吗? 我想简单的显示 标准的PHP错误 , 没有 了错误。 问题答案: 并非没有主要违反框架原理的问题(如果您仍然感兴趣,我将在下面告诉您如何做)。 有一些事情使这很难完成。取消默认错误和异常处理程序很容易 但这给您带来两个主要障碍。 第一个是Laravel在其引导过程中注册了一个关闭处理程序,该关闭功能将查找最后一个错误,如果是致命错误,请手动

  • 我想尝试一下在这里的链接描述中提到的选项,一旦我能够移除这个异常。 任何关于如何在Spring4中使用注释处理404的指针都将非常有帮助。 试用以下代码:- 该应用程序可以很好地进行有效的url映射。它是使用spring Boot构建的。PFB应用程序注释类:-