2024 年必须了解的 5 个后端框架 zod-express-middleware

2025-06-10

2024 年必须了解的 5 个后端框架

zod-express 中间件

各位开发者们,大家好!🌟 今天,让我们深入 Node.js 的火热世界,揭秘 2024 年最火爆的 5 大后端框架。系好安全带,体验编程的过山车之旅吧!🎢

2024 年构建出色 API 的 5 大 Node.js 框架
简介:揭开后端奇迹的面纱

自 2009 年以来,Node.js 一直备受瞩目,成为后端开发者的首选。随着 Netflix 和 PayPal 等巨头的加入,它俨然成为 Web 开发领域的巨星。🤘
2024 年构建出色 API 的 5 大 Node.js 框架

受欢迎程度上升的原因是加载时间的减少和性能的提升。因此,分析 2024 年排名前 5 的 Node.js 后端框架至关重要。

因此,本文将介绍 2024 年排名前 5 的 Node.js 后端框架、它们的功能和常见用例。
2024 年构建出色 API 的 5 大 Node.js 框架

2024 年构建出色 API 的 5 大 Node.js 框架

Express.js:极简主义与力量的碰撞💪

Express.js
Express.js,Node.js 框架中的佼佼者。开源且免费,深受新手和资深开发者的喜爱。非常适合构建 Web 应用程序和时尚的 RESTful API。

主要功能:Express.js Showtime 🎬

1. 高效路由:像老板一样处理 HTTP 请求!🚀
Express.js 让处理 HTTP 请求变得轻而易举。它就像代码的 GPS,高效地将请求定向到特定任务。🗺️ 让我们用一个简单的例子来解释一下:

// app.js
const express = require('express');
const app = express();
const port = 3000;

// Homepage Route
app.get('/', (req, res) => {
  res.send('Welcome to the homepage!');
});

// User Profile Page Route
app.get('/user/:id', (req, res) => {
  const userId = req.params.id;
  res.send(`User Profile Page - ID: ${userId}`);
});
Enter fullscreen mode Exit fullscreen mode

2. 中间件支持

Express.js 允许使用中间件来处理 HTTP 请求。让我们看一个创建用于记录 HTTP 请求详细信息的中间件的简单示例。

const express = require('express');
const app = express();
const port = 3000;

app.use((req, res, next) => {
  console.log(`[${new Date().toLocaleString()}] ${req.method} ${req.url}`);
  next();
});
Enter fullscreen mode Exit fullscreen mode

3. 轻松集成数据库:它是数据库界的 Tinder。Express.js
让一切都变得简单!💑

Express.js 在数据库领域提供了卓越的灵活性。它不会将您限制在特定的数据库中,而是允许开发人员自由选择他们喜欢的数据库系统。这种灵活性得益于 Express.js 的模块化和适应性。其模块化设计和丰富的专用于数据库连接的 npm 软件包实现了与数据库的顺畅集成。这个活跃的生态系统为开发人员提供了将 Express.js 与各种数据库无缝链接的工具,从而确保了精简高效的开发过程。🚀

4. 适合初学者的卓越之处:
Express.js 因其简单、简约的设计而脱颖而出,让开发人员可以轻松掌握,特别是如果他们精通 JavaScript 和 Node.js。

借助 Bit 这样的工具,Express.js 入门变得轻而易举。对于初学者来说,Bit 是一个专为创建模块化软件而打造的尖端构建系统。

有趣的是,Express.js 本身就具有可组合性。它就像积木一样,你可以在应用程序的任何地方轻松插入和使用。🧩✨

您可以看到两个组件:授权器和 API 应用。这两个组件已实现为独立的 Bit 组件,并在其独立空间中进行维护和版本控制。 这样,您就可以快速以可组合的方式设计您的应用!
2024 年构建出色 API 的 5 大 Node.js 框架

2.NestJS:一种新颖的结构化方法

NestJS
NestJS 是一个出色的框架,旨在用 Node.js 构建可扩展且高效的服务器端应用程序。它的方法融合了渐进式 JavaScript,并提供了使用 TypeScript 编写代码的灵活性。尽管它完全支持 TypeScript,但它也兼容纯 JavaScript,并支持面向对象编程、函数式编程和函数式响应式编程。

主要特点:是什么让它脱颖而出

1. 模块化优势
Nest.js 擅长将代码分解为易于管理的模块,从而增强可维护性。请看下面的示例模块:

import { Module } from '@nestjs/common';

@Module({
 imports: [
  CacheModule
 ],
 controllers: [PaymentController],
 providers: [PaymentService],
})
export class PaymentModule {}
Enter fullscreen mode Exit fullscreen mode

此支付模块可以无缝导出到其他模块。在本例中,通用缓存模块在支付模块内导出。Nest.js 的模块结构简化了维护,使其成为一项突出的功能。🌐🧩
2. 可扩展协同
Nest.js 通过将应用程序分解为可管理的模块,将可扩展性提升到一个新的水平。它支持灵活的组件替换,通过微服务无缝处理高流量,并在异步操作方面表现出色。这确保了它能够高效处理增加的工作负载,同时保持最高的可靠性和性能。

3.依赖注入之舞
Nest.js 中的依赖注入涉及向类添加外部依赖,而不是在类本身内创建依赖。让我们深入研究一个例子:

import { HttpException, Injectable, NotFoundException } from '@nestjs/common';

@Injectable()
export class PaymentService {
  constructor() {}

  getReceipt() {
    return 'Payment Receipt';
  }
}
Enter fullscreen mode Exit fullscreen mode

在此代码片段中,创建了 PaymentService 并使用 @Injectable() 注解标记,使其可注入。现在,让我们看看如何使用这项服务:

import { Controller, Get, Post, Body } from '@nestjs/common';
import { PaymentService } from './payment.service';

@Controller('payment')
export class PaymentController {
  constructor(private readonly paymentService: PaymentService) {}

  @Get()
  getPaymentReceipt() {
    return this.paymentService.getReceipt();
  }
}
Enter fullscreen mode Exit fullscreen mode

此示例展示了如何将 PaymentService 注入 PaymentController,从而无缝访问其功能。🕺💡
4. TypeScript 防护
Nest.js 利用 TypeScript 提供强大的类型安全性,在开发过程中时刻防范潜在错误。这不仅增强了代码的整体可靠性,也提高了代码的可维护性。让我们来看一个例子:

export class PaymentDto {
  @IsNotEmpty()
  @IsEnum(SERVICE_PROVIDER_SLUG, {
    message: `Invalid serviceProvider. Valid options are: ${Object.values(SERVICE_PROVIDER_SLUG).join(', ')}`,
  })
  serviceProvider: string;

  @IsNotEmpty()
  @IsNumber()
  value: number;

  @IsNotEmpty()
  @IsString()
  validityPeriod: string;

  @IsNotEmpty()
  @IsArray()
  @ArrayNotEmpty()
  @ValidateNested()
  @Type(() => PaymentAttributesDto)
  paymentAttributes: PaymentAttributesDto[];
}
Enter fullscreen mode Exit fullscreen mode

在此示例中,我们创建了一个名为 PaymentDto 的数据传输对象 (DTO),并配备了各种参数。@IsNumber() 和 @IsString() 等注解充当守护者,确保每个参数都符合指定的类型。例如,尝试将字符串值赋给“value”参数将触发错误,从而为您的应用程序增添一层额外的保护。🛡️🚧

Koa.js:优雅轻量

Koa.js
Koa.js 是由 Express.js 团队打造的一款紧凑且富有表现力的 Web 框架。它摒弃了回调函数,转而采用复杂的异步函数来无缝处理错误。

主要特点:是什么让它脱颖而出

1. 上下文功能 (ctx)
Koa.js 引入了 ctx(上下文)的概念来捕获请求和响应的复杂细节。此上下文能够优雅地流经每个中间件。请观察以下示例:

const Koa = require('koa');
const app = a new Koa();

app.use(async (ctx) => {
  const { method, url, request, response } = ctx;
  console.log('Method: ' + method + ' Request: ' + request);
});
Enter fullscreen mode Exit fullscreen mode

app.listen(3000);
这里,ctx 对象封装了 HTTP 方法、URL、请求和响应等关键信息,为开发人员提供了正在进行的进程的全面视图。

2.中间件组合
与 Express.js 类似,Koa.js 也采用了中间件函数的概念来处理 HTTP 请求和响应。以下是一个简单的中间件示例:

javascript
复制代码
const Koa = require('koa');
const app = new Koa();

应用程序.使用(异步(ctx,next)=> {
等待下一个();
});

app.listen(3000);
在此代码片段中,创建了一个基本的中间件,展示了 Koa 处理中间件的亲和力,其方式让人联想到它的前身 Express.js。🌟🚀
3. Async/Await 支持

Koa 使用 async/await 语法,以更像同步的方式编写异步代码。以下示例包含使用 async/await 关键字的内容。

const Koa = require('koa');
const app = new Koa();

app.use(async (ctx) => {
  const data = await fetchData();
  ctx.body = Data: ${data} ;
});

app.listen(3000);
Enter fullscreen mode Exit fullscreen mode

4.错误处理

Koa.Js 支持多种类型的错误处理。我们可以使用 app.emit() 或 ctx.throw() 来处理错误。以下示例包含了上述错误处理方法。

const koa = require('koa');
const app = new koa();

//Error Handling Method 1
app.use(async (ctx, next) => {
  try {
    await Promise.reject('Something went wrong');
  } catch (err) {
    ctx.status = err.status || 500;
    ctx.body = err.message;
    ctx.app.emit('error', err, ctx);
  }
});
Enter fullscreen mode Exit fullscreen mode

//错误处理方法2
app.use(async (ctx, next) => {
ctx.throw(500, 'error');
});

app.on('error', (err, ctx) => {
console.log(err);
});

应用程序.监听(3000);

Hapi.js

Hapi.js
Hapi.js 是一个开源框架,其缩写(Http-API)简洁易懂,是开发可扩展 Web 应用程序的强大工具。它的优势在于能够编写 REST API,并且在沃尔玛实验室中积累了丰富的经验,能够应对“黑色星期五”等购物节期间激增的在线购物流量。

主要特点:是什么让它脱颖而出

1. 通过配置进行设计
Hapi.js 采用配置驱动的设计,允许开发人员使用配置对象轻松设置路由、定义设置并集成插件。请欣赏以下示例:

const Hapi = require('@hapi/hapi');

const server = Hapi.server({
  port: 3000,
  routes: {
    cors: true,
  },
});

server.route({
  method: 'GET',
  path: '/',
  handler: (request, h) => {
    return 'Hello, Hapi!';
  },
});

async function start() {
  await server.start();
  console.log(`Server running at ${server.info.uri}`);
}

start();
Enter fullscreen mode Exit fullscreen mode

在此代码片段中,配置的强大功能在服务器设置、路由定义和 CORS 支持无缝配置时得以充分体现。

2. 强大的插件系统
Hapi.js 拥有强大的插件系统,可以轻松集成。请看以下示例:

const start = async function () {
    const server = Hapi.server();

    await server.register([{
        plugin: require('plugin1'),
        options: {}
    }, {
        plugin: require('plugin2'),
        options: {}
    }]);
};
Enter fullscreen mode Exit fullscreen mode

此代码片段演示了两个插件的轻松集成,并能够通过选项键将选项传递给每个插件。

3.身份验证和授权

Hapi.js 堪称一座堡垒,它内置了对各种身份验证策略的支持,并提供了一种定义访问控制策略的简单方法。请观察以下示例中的身份验证能力:

server.route({
  method: 'GET',
  path: '/private-data',
  handler: (request, h) => {
    // Access private data only if authenticated
    const user = request.auth.credentials;
    return `Welcome, ${user.username}!`;
  },
  options: {
    auth: 'jwt', // Use JWT authentication strategy
  },
});
Enter fullscreen mode Exit fullscreen mode

在这个场景中,身份验证策略被优雅地定义为“jwt”,确保对私人数据的安全访问。

4.输入验证

Hapi.js 非常重视输入验证。在路由的选项对象中,开发者可以定义哪些输入需要验证。默认的验证对象包含对标头、参数、查询、负载、状态以及失败操作策略的检查。

Adonis.js

Adonis.js 在路由方面表现出色,为您的应用程序提供了一种无缝且直观的路由定义方式。该路由系统设计得富有表现力且功能强大,使开发人员能够轻松定义和管理其应用程序的各个端点。

主要特点:是什么让它脱颖而出

1. 全栈 MVC 框架

Adonis.js 遵循 MVC 架构模式。MVC 框架有助于组织代码,使其更易于维护和扩展。

2. 集成 ORM(Lucid)用于数据库交互

Adonis.js 集成了其自有的对象关系映射 (ORM) 系统 Lucid。Lucid 通过提供富有表现力的查询构建器并支持各种数据库系统,简化了数据库交互。

下面简单介绍一下如何使用 Lucid 与数据库进行交互:

const Model = use('Model');

class User extends Model {
}

module.exports = User;
Enter fullscreen mode Exit fullscreen mode

在这个例子中,User 模型使用 Lucid 定义,它成为了读写数据库的强大工具。下面的路由演示了如何轻松地获取所有

const Route = use('Route');
const User = use('App/Models/User');

Route.get('users', async () => {
  return await User.all();
});
Enter fullscreen mode Exit fullscreen mode

通过使用 User.all(),Adonis.js 简化了从数据库获取用户的过程。

3. 认证系统

Adonis.js 不仅仅是一个 MVC 框架,它还带来了一个强大的身份验证系统。凭借内置的用户身份验证和授权支持,Adonis.js 可以轻松处理用户会话、密码哈希和访问控制。

看一下这个例子,它说明了获取用户的简单性:

const Route = use('Route');
const User = use('App/Models/User');

Route.get('users', async () => {
  return await User.all();
}).middleware(['auth']);
Enter fullscreen mode Exit fullscreen mode

在这种情况下,中间件(['auth'])确保只有经过身份验证的用户才能访问用于获取用户的路由。Adonis.js 简化了身份验证流程,使其成为应用程序安全性不可或缺的一部分。🛡️🔐

鏂囩珷鏉ユ簮锛�https://dev.to/sufian/the-5-must-know-backend-frameworks-in-2024-3olg
PREV
免费托管 React JS 应用的 6 种方法
NEXT
🚀 提高 JavaScript 程序员效率的技巧 🚀 💻