nodejs系列:38.koa之koa-parameter中间件-中篇

766 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情

系列介绍

该系列主要是介绍一些nodejs相关的基础知识,没有什么特别难的知识点,都是一些比较基础知识点。大家学习起来,也会比较容易理解和接收。

这些知识点,也是以前自己学习nodejs的时候,学习过的知识点。有些知识点,可能是由于学习的时间比较久了,也有可能是平时工作中用到的机会比较少,也差不多快把它们都忘记掉了。现在把它们都写下来,写成文章,一方面是记录下自己以前学习的nodejs知识点,一方面也是复习巩固自己以前学习的nodejs知识点。不要学着学着,就把以前的知识点都忘光了。

环境安装

实现之前,你首先需要安装nodejs环境。因为我们写的代码需要在node环境上运行,如果你没有,那么文件会运行不了。

以下是nodejs的安装地址,如果你没有安装的话,可以先把它安装上。安装了可以忽略这一步,跳到下面一步。

nodejs安装

前言

在上一篇文章里nodejs系列:37.koa之koa-parameter中间件-上篇,我们介绍了koa-parameter这个中间件的功能和作用。同时,也把客户端的代码写好了。

接下来,我们继续完成服务器端代码逻辑。

koa-parameter

koa-parameter中间件,主要是用来校验请求传送过来的参数是否是自己所需要的。

在接口联调时,对于某个参数,我们希望客户端能够把这个参数传递过来。比如,在查询文章或新闻详情的时候,我们需要用文章的id,去查询这篇文章。这时候,我们就需要客户端把这个文章的id放在请求的请求参数里,传递给后端服务器。后端服务器拿到文章Id,就可以从数据库里查询文章详情,然后返回给到客户端。这时候,就可以使用koa-parameter这个中间件,来校验请求的请求参数里,是否有文章的id。如果有,后端的逻辑可以继续往下执行,从数据库里查询数据,返回给到客户端;如果没有,则返回报错信息给到客户端。

实现

创建文件

创建一个index.js文件,服务器端代码逻辑在这个文件里编辑。

安装koa-parameter
npm install koa-parameter
引入koa,创建服务器
const koa = require("koa");
const app = new koa();
引入koa-cors中间件,解决跨域问题
const cors = require("koa-cors");
app.use(cors());
引入koa-parameter中间件
const parameter = require("koa-parameter");
注册koa-parameter中间件
parameter(app);
使用koa-parameter中间件
app.use((ctx) => {
  ctx.verifyParams({
    id: "string",
  });
  ctx.body = "响应内容";
});

使用了koa-parameter中间件,会往上下文对象添加一个verifyParams方法。我们使用这个方法,来对请求的请求参数做校验。

verifyParams方法,参数传递一个对象

  • 对象属性的键是你要校验的参数名称
  • 对象属性的值是要校验参数的数据类型,比如number,string,bollean等
启动服务器
app.listen(3000, () => {
  console.log("服务器启动");
});

我们在cmd里用node运行index.js文件,启动服务器。

然后,把客户端html文件,运行到浏览器。客户端文件一运行,就会向服务端发送请求。

0001.png

0002.png

在浏览器的network里,我们可以看到,请求发送了,但是服务器返回了一个422状态码,请求失败了。

这是因为我们使用了koa-parameter中间件,对请求的请求参数做了校验。请求参数需要有一个id字段,它的值为string类型。

而我们看客户端发送的请求

0003.png

没有携带id这个字段,koa-parameter中间件没有检验通过,服务器端逻辑没有继续往下执行,同时返回422状态码给到客户端。

知道问题原因所在,那我们就知道怎么解决了。

在客户端发送请求里,加上id这个字段

ajax("http://localhost:3000/articleDetail?id=1");

修改好,刷新浏览器。这时,我们发现,请求成功了,服务器返回了内容。

0004.png

小结

本篇主要是完成了服务器端的代码逻辑,使用koa-parameter中间件,来校验请求的请求参数对象。

如果校验通过,服务器端代码逻辑正常执行,把结果返回给到客户端。

如果校验不通过,服务器端代码逻辑没有继续执行,同时,返回422状态码给到客户端。

最后,放上自己比较喜欢的一句诗句:

千淘万漉虽辛苦,吹尽狂沙始到金 - 唐 刘禹锡《浪淘沙》