Express 中处理错误和未处理路由

概览

在使用 Express 开发 Web 应用程序时,有效地处理错误和管理未匹配任何定义处理程序的路由至关重要。这确保了应用程序的健壮性和更好的用户体验。

Express 中的错误处理

Express 通过中间件提供了内置的错误处理机制。在 Express 应用程序中进行适当的错误处理包括定义错误处理中间件函数,以捕获错误并作出相应响应。

分步指南

1. 创建错误处理中间件

错误处理中间件定义了四个参数:errreqresnext

javascript 复制代码
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('出错了!');
});

2. 使用 next()

next() 函数至关重要。它将错误传递给链中的下一个错误处理中间件。在路由处理程序或其他中间件中,调用 next(err) 将错误传递给错误处理程序。

javascript 复制代码
app.get('/route', (req, res, next) => {
  try {
    // ... 您的逻辑
  } catch (err) {
    next(err);
  }
});

3. 处理异步错误

对于异步代码,使用 catch 或与 promises 和 async/await 一起使用 next 来处理错误。

javascript 复制代码
app.get('/async-route', async (req, res, next) => {
  try {
    // 尝试运行异步操作
    const data = await someAsyncOperation();
    // 如果成功,将数据发送回客户端
    res.send(data);
  } catch (err) {
    // 如果 someAsyncOperation() 中发生错误,捕获它
    // 然后将错误传递给下一个错误处理中间件
    next(err);
  }
});

处理未匹配的路由

未处理的路由是指不匹配任何定义路由的请求。优雅地处理这些路由是一个良好的实践。

处理未处理路由的步骤

1. 定义全捕获路由

在所有路由之后,添加一个全捕获路由处理程序。

javascript 复制代码
app.use('*', (req, res) => {
  res.status(404).send('404 - 未找到');
});

这将捕获对未定义路由的任何请求,并返回 404 状态码。

2. 自定义响应

您可以根据需要自定义 404 响应,比如渲染一个 404 页面或返回一个 JSON 响应。

javascript 复制代码
app.use('*', (req, res) => {
  res.status(404).render('NotFound');
});

结论

在 Express 中适当地处理错误和管理未匹配的路由是稳定和用户友好 Web 应用程序的关键组成部分。通过实施这些策略,您可以确保您的应用程序行为可预测,并在发生错误或访问错误路由时为用户提供信息性反馈。


English version: Handling Errors and Unhandled Routes in Express

Overview

When developing web applications with Express, it's crucial to handle errors effectively and manage routes that do not match any defined handlers. This ensures a robust application and a better user experience.

Error Handling in Express

Express provides a built-in mechanism for error handling through middleware. Proper error handling in an Express application involves defining error-handling middleware functions that catch errors and respond accordingly.

Step-by-Step Guide

1. Creating an Error Handling Middleware

An error handling middleware is defined with four arguments: err, req, res, and next.

javascript 复制代码
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

2. Using next()

The next() function is crucial. It passes the error to the next error handling middleware in line. In your route handlers or other middleware, call next(err) to pass errors to your error handler.

javascript 复制代码
app.get('/route', (req, res, next) => {
  try {
    // ... your logic
  } catch (err) {
    next(err);
  }
});

3. Handling Asynchronous Errors

For asynchronous code, use catch or next with promises and async/await to handle errors.

javascript 复制代码
app.get('/async-route', async (req, res, next) => {
  try {
    // Attempt to run the asynchronous operation
    const data = await someAsyncOperation();
    // If successful, send the data back to the client
    res.send(data);
  } catch (err) {
    // If an error occurs in someAsyncOperation(), catch it
    // Then pass the error to the next error handling middleware
    next(err);
  }
});

Handling Unmatched Routes

Unhandled routes are requests that do not match any of the defined routes. It's good practice to handle these gracefully.

Steps for Handling Unhandled Routes

1. Define a Catch-All Route

After all your routes, add a catch-all route handler.

javascript 复制代码
app.use('*', (req, res) => {
  res.status(404).send('404 - Not Found');
});

This will catch any requests to undefined routes and return a 404 status code.

2. Customize the Response

You can customize the 404 response as needed, maybe rendering a 404 page or returning a JSON response.

javascript 复制代码
app.use('*', (req, res) => {
  res.status(404).render('NotFound');
});

Conclusion

Proper error handling and managing unmatched routes in Express are key components of a stable and user-friendly web application. By implementing these strategies, you can ensure that your application behaves predictably and provides informative feedback to the user in case of errors or incorrect route access.

相关推荐
朝朝暮暮an1 天前
Day 2|Node.js 运行机制、模块系统与异步初探
node.js
aidou13142 天前
Visual Studio Code(VS Code)安装步骤
vscode·npm·node.js·环境变量
止观止2 天前
告别 require!TypeScript 5.9 与 Node.js 20+ 的 ESM 互操作指南
javascript·typescript·node.js
一只专注api接口开发的技术猿2 天前
淘宝商品详情API的流量控制与熔断机制:保障系统稳定性的后端设计
大数据·数据结构·数据库·架构·node.js
天远数科2 天前
天远车辆过户查询API集成指南:Node.js 全栈视角下的二手车数据挖掘
大数据·数据挖掘·node.js·vim
全栈小52 天前
【前端】win11操作系统安装完最新版本的NodeJs运行npm install报错,提示在此系统上禁止运行脚本
前端·npm·node.js
莫有杯子的龙潭峡谷2 天前
在 Windows 系统上安装 OpenClaw
人工智能·node.js·安装教程·openclaw
朝朝暮暮an3 天前
Node.js-第一天学习内容
node.js
lichenyang4533 天前
Node.js AI 开发入门 - 完整学习笔记
人工智能·学习·node.js
岁岁种桃花儿3 天前
NodeJs从入门到上天:什么是Node.js
前端·node.js