在
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;
let count = ctx.request.body.count;
const url = 'https://route.showapi.com/1211-1';
const result = await ctx.curl(url,{
method: 'POST',
dataType: 'json',
data: {
count: count,
showapi_appid: '3****1',
showapi_sign: 'a**********************4'
});
ctx.body = {
result: result
这里用的是https://www.showapi.com/的免费接口。
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,
},
cors: {
origin:'*',
allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS'
以上也就是一些简单的场景的使用,是上Egg.js
提交的功能和说明都是非常强大的,一定多看文档。
在Egg.js (四) httpclient模块的使用 微信小程序获取用户openid写到的实际是以一个示例来发送GET请求。在Egg.js (二) GET和POST请求这里是自己写GET和POST请。这里还是多看文档:https://eggjs.org/zh-cn/basics/controller.htmlhttps://eggjs.org/zh-cn/core/httpclient.html下来还是以一个实例还写下发送POST请求。Controller中实现async showapi()
使用Egg写接口时,当请求为POST请求,使用ctx.request.body即可接收到参数。如果Body为form-data时,用ctx.request.body是接收不到参数的,那是因为Egg封装里面只接收x-www-form-urlencoded这种类型我们只要将Body的类型改为x-www-form-urlencoded即可用ctx.request.body接收参数
x-www-form-urlencoded 多个字段值用 & 拼接,用于传文本。(「窗体数据被编码为名称/值对」)
Egg 是基于 Koa 实现的
Egg 的中间件形式和 Koa 的中间件形式是一样的,都是基于洋葱圈模型
Koa中的中间件:http://eggjs.org/zh-cn/intro/egg-and-koa.html#midlleware
Egg中的中间件:http://eggjs.org/zh-cn/basics/middleware...
一、文章前言egg.js是node.js的一个web后台框架,为我们进行web后台开发带来了太多的便利。诸如此类的框架还有很多,例如:express、koa。本文将着重讨论egg.js,因为它是很严格的MVC开发模式。
eggJS『约定优于配置』二、准备工作1.首先我们需要先找到egg.js的官网:[egg.js](https://eggjs.org/zh-cn/)
2.开发工具,这里我使用的是vs
<form action="/news/doAdd?_csrf=<%=csrf%>" method="POST">
用户名:<input type="text" name="username"/><br><br>
密 码:<input type="text"name="passwor...
module.exports = (option, app) => {
return async function auth (ctx, next) {
ctx.state.csrf = ctx.csrf;
await next();
2、注册中间件,config > config.default.js
// config.default.js
坑1:wx.request()的post请求发不出去,不允许http
脱坑方案:在『微信开发者工具』:设置>>项目设置>>勾选『不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书』
坑2:egg.j...
在上面的配置中,我们将请求的路径中的 /api 替换为空字符串,并将请求代理到 http://localhost:8080 上。
最后,在我们的控制器中,可以通过 this.ctx.proxy 对象来代理请求:
```javascript
const result = await this.ctx.proxy('/api/user/getUserInfo', {
method: 'GET',
这里我们将请求代理到 http://localhost:8080/api/user/getUserInfo 上,并使用 GET 方法发送请求。
以上就是在 Egg.js 中配置代理服务器的步骤,希望能对你有所帮助!