场景:
在实际开发中,需要将后端接口封装成sdk,可供前端直接调用,接口可实现页面跳转等
实际运用:
实际开发中,前端项目时基于node的项目,需要重新封装一层后端接口,并实现页面的可配置化跳转。
实际调试中,注意node版本,版本不同,差异很大。我本地试的v8.9.4版本
1.node中获取请求参数两种方式:
req.body获取post请求参数,req.query获取get请求参数,req.params获取get请求参数,url中直接拼接参数的那种,如 http://localhost:8080/1
req.params["id"]获取的就是1
2.sdk提供post和get两种方式,需要校验origin & referer
其中origin是post方式独有的,origin显示页面的来源,包含协议和domain(根域地址),不包含具体的路径地址,不会包含用户的敏感信息,相比referer更安全,可防止CSRF攻击,一般存在于CORS跨域的请求中,response中可查看到Access-Control-Allow-Origin
referer存在于get和post请求中,告知服务请求方的原始资源的URI,包括协议+根域+参数,因为参数可能包含些敏感信息,可能会导致信息泄露
因此在模拟测试post请求时,而且需要origin时,并且需要测试页面跳转时,可模拟表单请求的方式来进行测试
在模拟get请求时可通过a标签,设置好href为调用地址即可
3.因为是登录的场景,需要写入登录状态,而且涉及到B端账户和C端账户的关联关系,因此需要将登录态写入到cookie中,而且因为有页面的跳转,因此要做到cookie的跨域传递(一般是根域情况下,默认跳转的时候自动传递过去)
node在设置cookie的时候可通过以下方式来设置:
单个cookie:
res.setHeader("set-cookie", `aticket=${aticket};path=/;HttpOnly;Domain=${domain};expires=${expires};`)
多个cookie设置:
res.setHeader("set-cookie", [`aticket=${aticket};path=/;HttpOnly;Domain=${domain};expires=${expires1};`,`bticket=${bticket};path=/;HttpOnly;Domain=${domain};expires=${expires2}`])
默认在跳转的时候,根域相同的情况下,cookie是可以传递过去的。如果是不同的根域,就需要自己写一层代理,将cookie写入到目标域中即可。
4.跳转的时候url设置时,需将url通过encodeURIComponent进行编码,然后通过decodeURIComponent即可
网友评论