一、Get请求和参数传递
Get请求的特点
通过URL来访问一个地址,比如http://127.0.0.1:7001,这种请求方式就是Get请求。Get请求也是我们最常用的请求方式。包括现在的扫码请求,其实也是变相的Get请求。
- 优点:使用简单,清晰有条例。适合网站和对外App的使用。
- 缺点:传递参数是有大小限制,安全性较差,不能完成重要数据的传递。
既有优点,又有缺点,所以就要根据具体的使用情况,而选择使用哪种请求方式。
1. 自由传参模式
Get请求我个人把它分为两种传参模式,一种是自由传参模式。这种传参模式和最早的传参模式相同。传递的参数个数和名称没有具体明确定义,设置不限制你是否传递参数。使用起来非常的灵活,所以就叫做自由传参模式。
/app/controller/jspang.js文件中编写
'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
async gettest() {
const { ctx } = this;
ctx.body = ctx.query; //ctx.query获取到传递参数对象
}
}
module.exports = HomeController;
/app/router.js文件添加路由
router.get('/gettest', controller.home.gettest);
访问http://127.0.0.1:7001/gettest?id=1&name=xiaoming
2. 严格传参模式
和自由传参模式对应的就是严格传参模式,也就是传递的参数个数是固定的,传递参数顺序是固定的,传递的参数名称是固定的。
Get的严格传参模式需要配合router.js文件进行设置
router.get('/gettest2/:id/:name', controller.home.gettest2);
ctx.params是获取所有的传递参数,ctx.params.name是获取传递参数的name值。
这时候的访问URL不在是用?来开始传递参数了,而是直接用/ 左斜杠来传递。
'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
async gettest2(){
const { ctx } = this;
ctx.body = 'id:' + ctx.params.id + '-----name:' + ctx.params.name;
}
}
module.exports = HomeController;
访问http://127.0.0.1:7001/gettest2/1/xiaohong
二、Post请求和参数接收
POST是在开发中经常使用的请求方式,比如表单数据的传递和图片的上传,都需要用到POST请求。这些是GET请求无法完成的。
安全设置解除
当你第一次请求时,可能会返回403错误,这是因为Egg.js默认开启了CSRF安全策略,学习阶段,我们可以关闭掉这个选项。
CSRF的全名为 Cross-site request forgery, 它的中文名为 伪造跨站请求。
关闭方法是,打开/config/config/default.js文件,也就是项目的默认配置文件。
然后设置配置项,关闭掉CSRF。
// 允许跨域
config.security = {
csrf: {
enable: false,
},
};
能发送POST请求后,需要在服务端接收请求。直接使用ctx,request.body来获取。
// post请求
async posttest() {
const { ctx } = this;
ctx.body = {
status: 200,
data: ctx.request.body,
};
}
配置路由
router.post('/posttest', controller.home.posttest);
使用postman这类工具进行访问post请求
学习日期:2021/12/23
视频参考:www.bilibili.com/video/BV1s3…
仅供个人学习和记录