分享 5 个和 NodeJS 相关的高级技巧

2023-08-31 08:59:09 浏览数 (1)

作为开发人员,我们都致力于打造高效、健壮且易于理解、修改和扩展的代码库。通过采用最佳实践和探索先进技术,我们可以释放 NodeJS 的真正潜力并显着提高应用程序的质量。在这篇文章中,我们将重点介绍 NodeJS 的五种高级技术。所以,系好安全带,我们要开车了,准备好探索它们吧。

1.添加中间件

不要将中间件添加到每个路由,而是使用 use 方法将其添加到路由列表的顶部。这样,中间件下面定义的任何路由都会在到达各自的路由处理程序之前自动通过中间件。

代码语言:javascript复制
const route = express.Router();
const {login} = require("../controllers/auth");

route.get('/login', login)

// isAuthenticated is middleware that checks whether 
// you are authenticated or not
// // ❌ Avoid this: middleware on each route
route.get('/products', isAuthenticated, fetchAllProducts);
route.get('/product/:id', isAuthenticated, getProductById)
代码语言:javascript复制
// ✅ Instead, do this
// Route without middleware
route.get('/login', login)

// Middleware function: isAuthenticated
// This will be applied to all routes defined after this point
route.use(isAuthenticated);

// Routes that will automatically check the middleware
route.get('/products', fetchAllProducts);
route.get('/product/:id', getProductById);

这种方法有助于保持代码的组织性,并避免为每个路由单独重复中间件。

2.使用全局错误处理

我们可以使用 NodeJS 全局错误处理功能,而不是在每个控制器上构建错误响应。首先,创建一个派生自内置 Error 类的自定义 AppError 类。此自定义类允许您使用 statusCode 和 status 等附加属性来自定义错误对象。

代码语言:javascript复制

// Custom Error class
module.exports = class AppError extends Error {
  constructor(message, statusCode) {
    super(message);
    this.statusCode = statusCode;
    this.status = statusCode < 500 ? "error" : "fail";

    Error.captureStackTrace(this, this.constructor);
  }
};

创建自定义错误类后,请在根路由器文件中添加全局错误处理程序中间件。该中间件函数采用四个参数(err、req、res、next)并处理整个应用程序中的错误。

在全局错误处理程序中,您可以根据错误对象的 statusCode、status 和 message 属性来格式化错误响应。

您可以自定义此响应格式以满足您的需求。此外,还包括用于开发环境的堆栈属性。

代码语言:javascript复制
// Express setup
const express = require('express');

const app = express();

app.use('/', (req, res) => {
  res.status(200).json({ message: "it works" });
});

app.use('*', (req, res) => {
    res.status(404).json({
        message: `Can't find ${req.originalUrl} this route`,
    });
});

// 


	

0 人点赞