Node 中基于 Koa 框架的 Web 服务搭建实战

前言

《Node之Web服务 - 掘金 (juejin.cn)》一文中,我们使用 HTTP 模块构建了后端接口,从而实现了后端服务的开发。可以对此进行进一步优化

  • http模块代码回顾
const http = require("http");

const server = http.createServer((req, res) => {
  if (reqUrl.pathname === "/") {
    res.writeHead(200, {
      "Content-Type": "text/html; charset=utf8",
    });
    res.end("/");
  } else if (reqUrl.pathname === "/user") {
    res.writeHead(200, {
      "Content-Type": "application/json; charset=utf8",
    });
    res.end("/user");
  } else if (reqUrl.pathname === "/login" && req.method === "POST") {
    res.end("login success");
  } else {
    res.end("errer");
  }
});

server.listen(3000, () => {
  console.log("server is running at http://127.0.0.1:3000");
});
  1. 引入模块:

    • const http = require("http");: 引入 Node.js 的 HTTP 模块,用于创建 HTTP 服务。
  2. 创建 HTTP 服务:

    • const server = http.createServer((req, res) => { ... });: 使用 http.createServer() 方法创建一个 HTTP 服务器,并传入一个回调函数。
    • 这个回调函数会在每次接收到 HTTP 请求时被调用,reqres 分别代表请求对象和响应对象。
  3. 处理路由:

    • 根路径 / 的请求:if (reqUrl.pathname === "/") { ... }

      • 设置响应头的 Content-Type"text/html; charset=utf8"
      • 使用 res.end("/") 返回响应内容 /
    • /user 路径的请求:else if (reqUrl.pathname === "/user") { ... }

    -   设置响应头的 `Content-Type` 为 `"application/json; charset=utf8"`。
    -   使用 `res.end("/user")` 返回响应内容 `/user`。
    
    • /login 路径的 POST 请求:else if (reqUrl.pathname === "/login" && req.method === "POST") { ... }
    -   使用 `res.end("login success")` 返回响应内容 `"login success"`。
    
    • 其他未定义的路径请求:else { ... }

      • 使用 res.end("error") 返回响应内容 "error"
  4. 启动服务:

    • server.listen(3000, () => { ... });: 在 3000 端口启动 HTTP 服务,并在控制台输出服务启动信息。

以上是基础的使用Node.js 的原生 HTTP 模块创建了一个简单的 Web 服务

接下来我们就使用koa框架去搭建一个服务

Koa框架构建服务

这里首先介绍一下什么是koa框架

Koa 是一个新的 web 框架,由 Express 的原班人马打造,致力于成为 web 应用和 API 开发领域更小、更富有表现力和更健壮的基石

Koa 利用 async 函数丢弃了回调函数,并提供了上下文统一的 API,使得编写 web 应用变得更加优雅、简洁和富有表现力

Koa 框架的一些主要特点包括:

  1. 基于 async/await 的异步处理机制:

    • Koa 使用 async/await 语法取代了传统的回调函数,使得代码更加简洁和易读。
  2. 中间件机制:

    • Koa 采用"洋葱模型"的中间件机制,中间件按照顺序执行,并可以控制请求/响应的流程。
  3. 上下文对象 (Context) :

    • Koa 提供了一个 Context 对象,封装了 Node.js 原生的 request 和 response 对象,使得开发者可以更方便地访问和操作请求/响应相关的信息。
  4. 轻量级和可扩展性:

    • Koa 的核心库非常小,但可以通过第三方中间件进行扩展,满足各种复杂的业务需求。
  5. 优雅的错误处理:

    • Koa 提供了优雅的错误处理机制,可以集中处理应用程序中的各种异常。
  6. 路由管理:

    • Koa 没有内置路由功能,但可以通过第三方路由中间件,如 koa-router,来管理路由。

第一步首先我们需要引入依赖

npm i koa
npm i koa-router

接下来我们要去构建一个路由

这个也就是需要创建的接口

user.js

const router = require('koa-router')()

router.get('/user', async (ctx, next) => {
    ctx.body = {
        name: 'user',
        age: 18
    }
})

router.get('/home', async (ctx, next) => {
    ctx.body = {
        name: 'home',
        age: 18
    }
})

module.exports = router

这里创建了两个接口,分别是/user和/home

然后构建服务,并将路由传入

app.js

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

const userRouter = require('./routers/user');
app.use(userRouter.routes());

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

使用 Koa 创建了一个 Web 服务,并将路由定义和处理逻辑封装在了一个单独的 user 路由模块中。在主应用中,通过 app.use(userRouter.routes()) 将路由模块注册到了 Koa 应用中。

接下来我们运行app.js服务

image.png

接下来我们就去访问一下这两个接口

/user接口

image.png

/home接口

image.png

可见这两个接口都是访问成功的,Koa 框架书写接口更加的优雅

总结

本文讲解了如何使用koa框架,使用这个框架来构建后端项目,以及接口的书写都更加简洁、清晰和易维护

开发者可以利用 Koa 的这些优势,构建出简洁、灵活、可扩展的后端应用程序

相信看到这里的你一定会有所收获的!!!!赶紧构建一个属于自己的后端服务吧!!!!

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js Koa 框架,解析文件上传的 formData 通常使用 koa-body 或 koa-multer 间件。 1. koa-body 间件 koa-body 是 Node.js 的一个间件,用于解析 HTTP 请求体的数据,支持多种类型的数据格式,包括 JSON、form 和 text 等,还支持 multipart 类型的数据,也就是文件上传时的 formData。 使用 koa-body 间件解析 formData,需要设置 multipart 参数为 true,如下所示: ```javascript const Koa = require('koa'); const koaBody = require('koa-body'); const app = new Koa(); app.use(koaBody({ multipart: true, })); app.use(async (ctx) => { const file = ctx.request.files.file; console.log(file.name); // 输出上传的文件名 }); app.listen(3000); ``` 2. koa-multer 间件 koa-multer 是 Node.js 的一个间件,用于处理文件上传,它支持多种文件上传方式,包括普通上传、多文件上传等。与 koa-body 不同,koa-multer 只处理文件上传,不处理其他类型的请求体数据。 使用 koa-multer 间件解析 formData,需要先创建一个 multer 实例,然后使用该实例的 single 或 array 方法来处理文件上传,如下所示: ```javascript const Koa = require('koa'); const Router = require('koa-router'); const multer = require('@koa/multer'); const app = new Koa(); const router = new Router(); // 创建 multer 实例 const upload = multer({dest: 'uploads/'}); // 处理单个文件上传 router.post('/upload', upload.single('file'), async (ctx, next) => { console.log(ctx.req.file); // 输出上传的文件信息 }); // 处理多个文件上传 router.post('/uploads', upload.array('files', 10), async (ctx, next) => { console.log(ctx.req.files); // 输出上传的文件信息 }); app.use(router.routes()); app.listen(3000); ``` 在上面的示例,创建了一个 multer 实例,然后使用该实例的 single 和 array 方法来处理单个文件上传和多个文件上传。在处理上传文件时,需要指定上传文件的字段名,例如 single 方法的 'file',array 方法的 'files'。 综上所述,使用 koa-body 或 koa-multer 间件都可以解析文件上传的 formData。其koa-body 可以处理不同类型的请求体数据,而 koa-multer 则更加专注于文件上传。开发者可以根据自己的需求选择合适的间件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值