likes
comments
collection
share

Node后端库哪家强?Koa你必须得知道的那些事

作者站长头像
站长
· 阅读数 20

前言

在互联网技术日新月异的今天,Node.js 已经成为了构建高性能服务器端应用的主流选择。它为后端开发提供了高性能、高效能和高度可扩展性的解决方案,无论是构建微服务架构、实时应用还是大型企业级系统,Node.js都是一个值得考虑的强大工具。

正文

我们在使用node编写后端时,往往需要接收前端发送来的网络请求,而原生JS中并不携带这样的接收网络请求的API

所以,Express应运而生了

Express 是最早期也是最流行的 Node.js web 框架之一,它在 Node.js 社区中占据了主导地位多年。Express 的设计受到 Ruby on Rails 的影响,提供了一个简单而灵活的架构,用于构建 web 应用和 API。

Express 也许是 node.js 最早出的框架,里面集成了大量的中间件,造成了框架的笨重性。团队领队人 TJ 发现了 Express 的设计是有缺陷的,如果想要修复这个设计缺陷,就会造成 Express 的框架重构。

所以TJ决定再创建一个新的web开发框架——KOA

KOA介绍

Koa 是一个由 Express.js 原班人马开发的 Node.js web 框架,旨在成为一个更小、更富有表现力、更健壮的基础框架。Koa 的设计目标是提供一个更为现代化且灵活的方式来构建web应用和API服务。它通过利用异步函数(async functions)来更好地处理错误,并简化中间件的编写与使用。

对于中间件,与Express不同,KOA是非常灵活的,它基本上没有集成任何中间件

什么是中间件

中间件是一种功能性的处理单元,它位于操作系统和应用程序之间,或者是两个不同的应用程序之间,提供了一种标准化的通信和数据管理方式。它们可以访问请求对象(req)、响应对象(res)以及指向下一个中间件的函数(next)。中间件可以执行以下任务:

  1. 执行任意代码:例如日志记录、解析请求体、身份验证等。
  2. 改变请求和响应对象:例如修改请求头、响应状态码等。
  3. 结束响应过程:通过向客户端发送数据并关闭连接。
  4. 调用栈中的下一个中间件:通过调用 next() 函数,将控制权交给下一个中间件。

而在KOA中,其中间件就是它允许开发者在请求到达目标处理函数之前或者在响应发送给客户端之后,对HTTP请求和响应进行预处理或后处理。

KOA 被设计得更为轻量级,它不像Express那样设计内部使用了许多回调地狱,核心库的功能较少,鼓励使用小型模块来扩展功能,这使得 KOA 更加灵活和可定制。

举个例子

我们现在要在一个后端使用KOA,需要通过npm 安装 KOA

npm install koa

然后我们可以简单使用KOA构建一个实例appuse

Koa 引入了一个叫做 ctx(context)的对象,它封装了 Node.js 的原生请求和响应对象(即 req 和 res),并添加了许多实用的方法和属性,方便开发者使用。

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

const main = (ctx) => {
    console.log(ctx.request.url);

    ctx.body = 'hello koa '
}
app.use(main)

app.listen(3000, ()=> {
    console.log('server is running at http://localhost:3000');
})

Node后端库哪家强?Koa你必须得知道的那些事

我们就可以在本地3000端口上看到KOA返回的响应

但是KOA并不是只有这点功能,它跃的社区和丰富的生态系统,提供了大量的中间件和插件,可以帮助开发者快速搭建各种功能。

例如 Koa-router

koa-router是一个为Koa.js设计的灵活且功能强大的路由中间件。它为Koa应用程序提供了类似于Express的路由功能,允许你定义复杂的路由规则和处理函数,以响应不同的HTTP请求。koa-router是Koa生态系统中最受欢迎的路由库之一,因为它提供了简洁的API和高度的可配置性。

const Koa = require('koa');
const Router = require('koa-router');

const app = new Koa();
const router = new Router();

// 定义一个处理GET请求的路由
router.get('/', async ctx => {
  ctx.body = 'Hello, World!';
});

// 定义一个处理POST请求的路由
router.post('/submit', async ctx => {
  ctx.body = 'Received data: ' + JSON.stringify(ctx.request.body);
});

// 将路由中间件添加到Koa应用中
app.use(router.routes());
app.use(router.allowedMethods());

app.listen(3000);

在这个例子中,我们创建了一个处理根路径GET请求的路由,以及一个处理/submit路径POST请求的路由。ctx是Koa的上下文对象,包含了请求和响应的信息。

跨域问题解决

什么是跨域问题

跨域问题,即Cross-Origin Resource Sharing(CORS)问题,是Web开发中一个常见的安全限制,由浏览器的同源策略(Same-origin policy)所引起。同源策略是Web安全的一个基本组成部分,它的目的是为了防止恶意网站访问或修改其他网站的数据,保护用户的隐私和数据安全。

同源策略规定,来自不同源的客户端脚本在没有明确授权的情况下,不能读写对方的文档或数据。源(origin)由三个部分组成:协议(http/https)、域名和端口号。只要这三个中有任何一个不同,就认为是不同源。

例如,http://example.com:8080https://example.com:8080被认为是不同源,即使它们的域名和端口号相同,但协议不同;同样,http://example.comhttp://subdomain.example.com也被视为不同源,因为它们的域名不同。

我现在向一个地址请求一个接口,就会引起跨域问题:

Node后端库哪家强?Koa你必须得知道的那些事

但是如果利用Koa,跨域问题就显得十分微不足道,你只需要通过命令

npm i @koa/cors

安装koa允许跨域的库,并use

app.use(cors()) // 允许跨域

跨域问题就迎刃而解

总结

虽然现在使用node编写后端的项目十分稀少,但是js作为一个单线程语言,通过了node框架,以及各种大佬们对其的封装生产出的各种开源的库,让我们看到JS这个语言的精美之处。

在此感谢各位开源贡献代码的各位大佬。

求点赞评论收藏,有问题随时私信博主!

转载自:https://juejin.cn/post/7397615008391659530
评论
请登录