在Egg.js (四) httpclient模块的使用 微信小程序获取用户openid写到的实际是以一个示例来发送GET请求。
在Egg.js (二) GET和POST请求这里是自己写GET和POST请。
这里还是多看文档:
https://eggjs.org/zh-cn/basics/controller.html
https://eggjs.org/zh-cn/core/httpclient.html
下来还是以一个实例还写下发送POST请求。
async showapi() {
const { ctx } = this;
// 获取post 请求参数
let count = ctx.request.body.count;
const url = 'https://route.showapi.com/1211-1';
const result = await ctx.curl(url,{
method: 'POST', // 设置请求方式 默认是GET
dataType: 'json',
// contentType: 'json', // 默认是 form
data: {
count: count,
showapi_appid: '3****1',
showapi_sign: 'a**********************4'
}
});
ctx.body = {
result: result
}
};
这里用的是https://www.showapi.com/的免费接口。
router.js
router.post('/httpclient/showapi', controller.httpClient.showapi);
框架对 bodyParser 设置了一些默认参数,配置好之后拥有以下特性:
当请求的 Content-Type
为application/json
,application/json-patch+json
,application/vnd.api+json
和 application/csp-report
时,会按照 json
格式对请求 body
进行解析,并限制 body
最大长度为 100kb
。
当请求的 Content-Type
为 application/x-www-form-urlencoded
时,会按照 form
格式对请求 body
进行解析,并限制 body
最大长度为 100kb
。
如果解析成功,body
一定会是一个 Object
(可能是一个数组)。
一般来说我们最经常调整的配置项就是变更解析时允许的最大长度,可以在 config/config.default.js
中覆盖框架的默认值。
module.exports = {
bodyParser: {
jsonLimit: '1mb',
formLimit: '1mb',
},
};
如果用户的请求 body
超过了我们配置的解析最大长度,会抛出一个状态码为 413
的异常,如果用户请求的 body
解析失败(错误的 JSON
),会抛出一个状态码为 400
的异常。
注意:在调整 bodyParser
支持的 body
长度时,如果我们应用前面还有一层反向代理(Nginx
),可能也需要调整它的配置,确保反向代理也支持同样长度的请求 body
。
一个常见的错误是把 ctx.request.body
和 ctx.body
混淆,后者其实是ctx.response.body
的简写。
npm i egg-cors --save
config/plugin.js
中添加如下代码:exports.cors = {
enable: true,
package: 'egg-cors',
};
config/config.default.js
中添加如下代码: const config = exports = {
……
……
security: {
csrf: {
enable: false,
}, // 必须加 否则: 403 Forbidden message: "missing csrf token"
// domainWhiteList: [ '*' ]
},
cors: {
origin:'*',
allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS'
},
};
以上也就是一些简单的场景的使用,是上Egg.js
提交的功能和说明都是非常强大的,一定多看文档。