Egg.js 框架中 GET 和 POST请求

1,180 阅读1分钟

GET 请求和参数传递

自由传参模式

在 /app/router.js 文件中进行路由配置

  router.get('/request', controller.home.request);

打开/app/controller/home.js 文件,写一个 request 的方法。

  async request() {
    const { ctx } = this;
    ctx.body = ctx.query;
  }

通过浏览器访问

http://127.0.0.1:7001/request?name=小明&age=16

页面会显示

{
    "name": "小明",
    "age": "16"
}

严格传参模式

传递的参数个数、顺序、名称都是固定的

在 router.js 文件中,设置指定参数

  router.get('/request/:name/:age', controller.home.request);

打开/app/controller/home.js 文件,写一个 request 的方法。

  async request() {
    const { ctx } = this;
    ctx.body = ctx.params;
  }

通过浏览器访问,这个时候的访问URL不在是用?来开始传递参数了,而是直接用/ 左斜杠来传递。传参或者多传参数,都会报错。

http://127.0.0.1:7001/request/小明/16

POST 请求和参数的接收

在 /app/router.js 文件中进行路由配置

  router.post('/request', controller.home.request);

打开/app/controller/home.js 文件,写一个 request 的方法。

  async request() {
    const { ctx } = this;
    ctx.body = {
      status: 200,
      data: ctx.request.body
    }
  }

POST 请求可以通过工具发出,例如: Postman 软件、VSCode 插件 REST Client

安全设置解除

当你第一次请求时,可能会返回 403 错误,返回 message: "invalid csrf token" ,这是因为 Egg.js 默认开启了CSRF安全策略.

CSRF的全名为 Cross-site request forgery, 它的中文名为 伪造跨站请求。

打开 /config/config/default.js 文件,配置 CSRF

  config.security = {
    csrf :{
      enable:false,
    }
  };

跨域配置 安装 egg-cors

npm i egg-cors --save

配置 /config/plugin.js 文件

exports.cors = {
  enable: true,
  package: 'egg-cors',
};

配置 /config/config/default.js 文件

  // 允许跨域的方法
  config.cors = {
    origin:'*',       // security.domainWhiteList 失效
    allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH'
  }