跳转到主要内容

标签(标签)

资源精选(342) Go开发(108) Go语言(103) Go(99) angular(82) LLM(78) 大语言模型(63) 人工智能(53) 前端开发(50) LangChain(43) golang(43) 机器学习(39) Go工程师(38) Go程序员(38) Go开发者(36) React(33) Go基础(29) Python(24) Vue(22) Web开发(20) Web技术(19) 精选资源(19) 深度学习(19) Java(18) ChatGTP(17) Cookie(16) android(16) 前端框架(13) JavaScript(13) Next.js(12) 安卓(11) 聊天机器人(10) typescript(10) 资料精选(10) NLP(10) 第三方Cookie(9) Redwoodjs(9) ChatGPT(9) LLMOps(9) Go语言中级开发(9) 自然语言处理(9) PostgreSQL(9) 区块链(9) mlops(9) 安全(9) 全栈开发(8) OpenAI(8) Linux(8) AI(8) GraphQL(8) iOS(8) 软件架构(7) RAG(7) Go语言高级开发(7) AWS(7) C++(7) 数据科学(7) whisper(6) Prisma(6) 隐私保护(6) JSON(6) DevOps(6) 数据可视化(6) wasm(6) 计算机视觉(6) 算法(6) Rust(6) 微服务(6) 隐私沙盒(5) FedCM(5) 智能体(5) 语音识别(5) Angular开发(5) 快速应用开发(5) 提示工程(5) Agent(5) LLaMA(5) 低代码开发(5) Go测试(5) gorm(5) REST API(5) kafka(5) 推荐系统(5) WebAssembly(5) GameDev(5) CMS(5) CSS(5) machine-learning(5) 机器人(5) 游戏开发(5) Blockchain(5) Web安全(5) Kotlin(5) 低代码平台(5) 机器学习资源(5) Go资源(5) Nodejs(5) PHP(5) Swift(5) devin(4) Blitz(4) javascript框架(4) Redwood(4) GDPR(4) 生成式人工智能(4) Angular16(4) Alpaca(4) 编程语言(4) SAML(4) JWT(4) JSON处理(4) Go并发(4) 移动开发(4) 移动应用(4) security(4) 隐私(4) spring-boot(4) 物联网(4) nextjs(4) 网络安全(4) API(4) Ruby(4) 信息安全(4) flutter(4) RAG架构(3) 专家智能体(3) Chrome(3) CHIPS(3) 3PC(3) SSE(3) 人工智能软件工程师(3) LLM Agent(3) Remix(3) Ubuntu(3) GPT4All(3) 软件开发(3) 问答系统(3) 开发工具(3) 最佳实践(3) RxJS(3) SSR(3) Node.js(3) Dolly(3) 移动应用开发(3) 低代码(3) IAM(3) Web框架(3) CORS(3) 基准测试(3) Go语言数据库开发(3) Oauth2(3) 并发(3) 主题(3) Theme(3) earth(3) nginx(3) 软件工程(3) azure(3) keycloak(3) 生产力工具(3) gpt3(3) 工作流(3) C(3) jupyter(3) 认证(3) prometheus(3) GAN(3) Spring(3) 逆向工程(3) 应用安全(3) Docker(3) Django(3) R(3) .NET(3) 大数据(3) Hacking(3) 渗透测试(3) C++资源(3) Mac(3) 微信小程序(3) Python资源(3) JHipster(3) 语言模型(2) 可穿戴设备(2) JDK(2) SQL(2) Apache(2) Hashicorp Vault(2) Spring Cloud Vault(2) Go语言Web开发(2) Go测试工程师(2) WebSocket(2) 容器化(2) AES(2) 加密(2) 输入验证(2) ORM(2) Fiber(2) Postgres(2) Gorilla Mux(2) Go数据库开发(2) 模块(2) 泛型(2) 指针(2) HTTP(2) PostgreSQL开发(2) Vault(2) K8s(2) Spring boot(2) R语言(2) 深度学习资源(2) 半监督学习(2) semi-supervised-learning(2) architecture(2) 普罗米修斯(2) 嵌入模型(2) productivity(2) 编码(2) Qt(2) 前端(2) Rust语言(2) NeRF(2) 神经辐射场(2) 元宇宙(2) CPP(2) 数据分析(2) spark(2) 流处理(2) Ionic(2) 人体姿势估计(2) human-pose-estimation(2) 视频处理(2) deep-learning(2) kotlin语言(2) kotlin开发(2) burp(2) Chatbot(2) npm(2) quantum(2) OCR(2) 游戏(2) game(2) 内容管理系统(2) MySQL(2) python-books(2) pentest(2) opengl(2) IDE(2) 漏洞赏金(2) Web(2) 知识图谱(2) PyTorch(2) 数据库(2) reverse-engineering(2) 数据工程(2) swift开发(2) rest(2) robotics(2) ios-animation(2) 知识蒸馏(2) 安卓开发(2) nestjs(2) solidity(2) 爬虫(2) 面试(2) 容器(2) C++精选(2) 人工智能资源(2) Machine Learning(2) 备忘单(2) 编程书籍(2) angular资源(2) 速查表(2) cheatsheets(2) SecOps(2) mlops资源(2) R资源(2) DDD(2) 架构设计模式(2) 量化(2) Hacking资源(2) 强化学习(2) flask(2) 设计(2) 性能(2) Sysadmin(2) 系统管理员(2) Java资源(2) 机器学习精选(2) android资源(2) android-UI(2) Mac资源(2) iOS资源(2) Vue资源(2) flutter资源(2) JavaScript精选(2) JavaScript资源(2) Rust开发(2) deeplearning(2) RAD(2)

category

探索Hapi、Express.js、NestJS、Koa.js和Adonis.js,在2024年构建您的API

介绍


Node.js自2009年以来一直是人们谈论的话题,大多数后端开发人员倾向于使用Node.js。在过去的几年里,它的受欢迎程度有所提高。


它被称为美国最受欢迎的网络开发工具,包括Netflix和PayPal等客户。

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

因此,本文将介绍2024年的前5个Node.js后端框架、它们的特性和常见用例。

顺便说一下,如果你想看看一个简单的演示来构建一个Express API,请看看我的Bit Scope。

Express.js:久经考验的冠军

Express.js是Node.js最著名的后端框架之一。它是一个开源的web应用程序框架,免费提供,建立在Node.js平台上。由于这是一个最小的框架,新手和经验丰富的web开发人员都倾向于使用Express.js。它主要用于创建web应用程序和RESTful API。

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


1.高效路由

Express.js提供了一种干净简单的方法来管理各种HTTP请求并将它们分配给特定的任务。让我们来看一个例子。

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

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

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


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();
});


3.易于数据库集成

Express.js与数据库无关。它不强制执行特定的数据库选择。开发人员可以选择他们喜欢的数据库。将数据库与Express.js集成的容易性是因为它具有模块化和灵活的特性,以及提供数据库连接的丰富的npm包生态系统。

4.易于学习

Express.js以其简单和极简主义的设计而闻名,这使得开发人员很容易学习,尤其是如果他们已经熟悉JavaScript和Node.js的话。

此外,您可以使用Bit等工具轻松开始使用Express.js。如果您以前没有使用过Bit,它是一个用于可组合软件的下一代构建系统。

而且,如果你仔细想想,Express.js本身在自然界中是可组合的。您可以在应用程序中的任何位置即插即用组件。

例如,您可以创建中间件组件,这些组件可以在任何给定时间插入和退出。


您可以看到两个组件:授权程序和API应用程序。这两个组件被实现为独立的位组件,并在其独立空间中进行维护和版本控制。

通过这样做,您可以以可组合的方式快速设计您的应用程序!

要查看此完整实现,请查看我的Bit Scope。

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 {}

此支付模块可以导出到其他模块。在本例中,我们导出了该模块中的通用缓存模块。由于nest.js具有模块结构,因此易于维护。

2.可扩展性

Nest.js通过将应用程序分解为可管理的模块,支持灵活的组件替换,并通过微服务和异步操作适应高流量,从而实现无缝扩展。它确保在保持可靠性的同时高效处理增加的工作负载。

3.依赖注入

依赖项注入只是将外部依赖项添加到类中的方法,而不是在类本身中创建它。让我们来看一个例子。

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

@Injectable()
export class PaymentService {

constructor() {}

getReceipt() {
return 'Payment Receipt';
}

}


我们已经创建了支付服务,并添加了@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();
 }
}


4.类型安全

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[]

}

在本例中,我们创建了一个包含多个参数的dto,并添加了注释来验证参数类型。例如,如果我们向“value”参数发送一个字符串值,它将抛出一个错误。

Koa.js:优雅轻盈

Koa.js是一个更小、更具表现力的web框架,也是由Express.js团队设计的。它允许您放弃回调,并通过利用异步函数来处理错误。

主要特点:是什么让它脱颖而出
1.上下文对象(ctx)

Koa.js包含一个名为ctx的功能,用于捕获请求和响应的详细信息。这个上下文被传递给每个中间件。在本例中,我们记录了来自ctx对象的方法和请求。

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

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

app.listen(3000);


2.中间件组成

与ExpressJs非常相似,Koa支持用于处理HTTP请求和响应的中间件功能。在这个例子中,我们创建了一个简单的中间件。

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

app.use(async (ctx, next) => {
  await next(); 
});

app.listen(3000);

3.异步/等待支持

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);


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);
}
});

//Error Handling Method 2
app.use(async (ctx, next) => {
ctx.throw(500, 'error');
});

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

app.listen(3000);

Hapi.js

Hapi.js是Http-API的缩写,是一个用于开发可扩展web应用程序的开源框架。hapi最基本的用例之一是构建RESTAPI。

沃尔玛实验室创建了hapi js来处理黑色星期五等活动的流量,黑色星期五是美国日历上网上购物最繁忙的日子之一。

主要特点:是什么让它脱颖而出
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();


2.强大的插件系统

Hapi.js允许插件轻松集成,而不需要太多麻烦。让我们来看一个例子。

const start = async function () {

const server = Hapi.server();

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


在这个例子中,我们集成了两个插件。可以使用选项键将选项传递给插件。

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
},
});


基于该示例,我们可以直接将身份验证策略定义为“jwt”。

4.输入验证

输入验证是hapi.js的另一个关键方面。在路线的选项对象中,我们可以定义哪些输入需要验证。默认验证对象由以下值组成。

{
headers: true,
params: true,
query: true,
payload: true,
state: true,
failAction: 'error'
}

Adonis.js

Adonis.js是一个功能齐全的Node.js MVC框架。它能够构建可扩展和可维护的应用程序。Adonis.js遵循与Laravel类似的结构,包括ORM、身份验证和开箱即用路由等功能。

主要特点:是什么让它脱颖而出
1.全栈MVC框架

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


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

Adonis.js有自己的ORM,名为Lucid。Lucid提供了一个表达型查询生成器,并支持各种数据库系统。在清醒中,我们可以创建模型来读取和写入数据库。让我们看看下面的例子。

const Model = use('Model')

class User extends Model {
}

module.exports = User


我们使用的是这个用户模型,而不是数据库查询。现在我们正在创建一个路由,在其中我们获取用户。我们可以简单地使用user.all()来获取用户。

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

Route.get('users', async () => {
return await User.all()
})

3.认证系统

Adonis.js内置了对用户身份验证和授权的支持。它提供了一组用于处理用户会话、密码哈希和访问控制的方法和中间件。

结论


2024年,上述后端框架在市场上屹立不倒。

无论您选择Express.js是因为它的简单,选择Nest.js是为了它的结构,选择Adonis.js是为了提高生产力,还是选择Koa.js是因为其优雅,选择正确的框架都是至关重要的。

这总是取决于你的要求。了解您的项目需要什么是至关重要的,并在此基础上选择适当的框架。

此外,必须寻找最新趋势、现有框架的新功能和新框架,才能在2024年实现成功的后端开发之旅。