egg 项目里编写基础的 POST 接口:使用 POST 请求参数获取

简介: egg 项目里编写基础的 POST 接口:使用 POST 请求参数获取

前言


POST 接口 跟 GET 请求差不多,只是 POST 接口需要借助 Postman 工具进行请求,因为通过浏览器无法手动发起 POST 请求,只能通过浏览器地址栏发起 GET 请求。


postman 如下:点击加号就可以出现接口配置的

1bb13f9e19964147b3331e691bf183da.png



问题

比如我们要访问一个接口实现数据新增


实现

Egg 框架内置了 bodyParser 中间件来对 POST 请求 body 解析成 object 挂载到 ctx.request.body 上。


1、配置路由

// app/router.js
'use strict';
/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller } = app;
  router.get('/', controller.home.index);
  router.get('/user/:id', controller.home.user);
  router.post('/add', controller.home.add);
};


2、配置控制层

// app/controller/home.js
'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
  async index() {
    const { ctx } = this;
    ctx.body = 'hi, egg';
  }
  async user() {
    const { ctx } = this;
    const { id } = ctx.params;
    ctx.body = id;
  }
  async add() {
    const { ctx } = this;
    ctx.body = "新增页面";
  }
}
module.exports = HomeController;


3、postman 访问发现报 403

6ce56dfceb86467999fda06ca84e28dd.png



控制台也报错了:

 WARN 23844 [-/127.0.0.1/-/2ms POST /add] missing csrf token. See https://eggjs.org/zh-cn/core/security.html#安全威胁csrf的防范


8176e9f0a4d549e59849af1b013413f1.png



4、报错的原因

Egg 启动的是本地地址 http://127.0.0.1:7001 ,但是你请求的 POST 或 GET 接口是非本地计算机(别人的电脑),或者使用 Postman 发起请求,都会触发安防策略。



5、处理报错

可以参考:【https://github.com/eggjs/egg-security】

95ad0f3cceb94e1580118ec1445cd3ce.png


在 egg 项目里的 config/config.default.js 做好白名单配置,全部允许请求:

config.security = {
  csrf: {
    enable: false,
    ignoreJSON: true
  },
  domainWhiteList: [ '*' ], // 配置白名单
};


33e775b2ac634aafbefcd10f53616f10.png


再次发送接口调用,发现可以了。

41cd6e51487342f48ad3898fabbab1a5.png

6、参数添加

怎么实现参数添加,接口返回数据,比如下面的,结果需要怎么返回


5227457e7fb542c7b9a0d81ea82f7bfc.png


7、修改控制层

添加 const body = ctx.request.body; 代码

'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
  async index() {
    const { ctx } = this;
    ctx.body = 'hi, egg';
  }
  async user() {
    const { ctx } = this;
    const { id } = ctx.params;
    ctx.body = id;
  }
  async add() {
    const { ctx } = this;
    const body = ctx.request.body;
    ctx.body = body;
  }
}
module.exports = HomeController;



修改完再次访问,发现就有了。


0ec2eccf3c4c41ceb471a8c5ff0372ce.png






目录
相关文章
egg 项目里编写基础的 GET 接口:使用 GET 请求参数获取
egg 项目里编写基础的 GET 接口:使用 GET 请求参数获取
185 0
egg 项目里编写基础的 GET 接口:使用 GET 请求参数获取
|
JSON 数据格式
okhttp3 模拟get、post(json参数传递,form表单提交)
本文是博主学习okhttp3 的记录,希望对大家有所帮助。
2132 0
|
5月前
|
JSON Java Maven
使用`MockMvc`来测试带有单个和多个请求参数的`GET`和`POST`接口
使用`MockMvc`来测试带有单个和多个请求参数的`GET`和`POST`接口
221 3
|
3月前
|
安全 前端开发
GET 和 POST:概述
【8月更文挑战第24天】
28 0
|
6月前
|
XML JSON Java
Android App网络通信中通过okhttp调用HTTP接口讲解及实战(包括GET、表单格式POST、JSON格式POST 附源码)
Android App网络通信中通过okhttp调用HTTP接口讲解及实战(包括GET、表单格式POST、JSON格式POST 附源码)
846 0
|
6月前
|
JSON 中间件 数据格式
在自定义服务器框架中处理 POST 请求
在自定义服务器框架中处理 POST 请求
|
JSON API 数据格式
python使用POST方法从API获取数据
使用POST方法从API获取数据
295 2
|
PHP
PHP开发中$_GET请求转为$_POST获取参数的解决方案
PHP开发中$_GET请求转为$_POST获取参数的解决方案
67 0
|
Java Apache 网络架构
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)(上)
【小家Spring】Feign发送Get请求时,采用POJO对象传递参数的最终解决方案 Request method ‘POST‘ not supported (附带其余好几个坑)
|
JSON 数据格式 Python
Python实战:使用requests通过post方式提交json数据
Python实战:使用requests通过post方式提交json数据
582 0