Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

node + koa转发api #2

Open
bienvenidoY opened this issue Apr 27, 2018 · 3 comments
Open

node + koa转发api #2

bienvenidoY opened this issue Apr 27, 2018 · 3 comments

Comments

@bienvenidoY
Copy link
Owner

bienvenidoY commented Apr 27, 2018

node koa 代理服务 get post 请求 发布

环境

  • node v9.8.0
  • koa ^2.5.0

说明

开发微信小程序调用后端接口,因为公司后端服务器使用ip,并且还是http的,所以使用自己服务器和域名做了下api 转发进行小程序的请求测试。

问题

跨域请求

yarn add koa-cors //安装
app.use(cors()); //使用

koa post接收不到前端参数

  • 原理

    对于POST请求的处理,koa2没有封装获取参数的方法,需要通过解析上下文context中的原生node.js请求对象req,将POST表单数据解析成query string(例如:a=1&b=2&c=3),再将query string 解析成JSON格式(例如:{"a":"1", "b":"2", "c":"3"})

    注意:ctx.request是context经过封装的请求对象,ctx.req是context提供的node.js原生HTTP请求对象,同理ctx.response是context经过封装的响应对象,ctx.res是context提供的node.js原生HTTP请求对象。
    具体koa2 API文档可见 https://github.com/koajs/koa/blob/master/docs/api/context.md#ctxreq

  • 解决方法

    yarn add koa-bodyparser //安装
    const bodyParser = require('koa-bodyparser')// 使用ctx.body解析中间件
    app.use(bodyParser())
    
    
     // 当POST请求的时候,中间件koa-bodyparser解析POST表单里的数据,并显示出来
    router.post('/phoneNumber', async ctx => {
        console.log(ctx.request.body)
        let data = await apiProxy.phoneNumber(ctx.request.body);
        ctx.body = data;
    })

例子

  • 代码片段
//登录
router
    .post("/login", async ctx => {
        //前端传过来的参数 ctx.request.body
        let data = await apiProxy.login(ctx.request.body);
        ctx.body = data;
    })

//node请求真实服务器
        get login() {
        return async function (option) {
            let options = {
                uri: this.baseUrl + '/session',
                json: option
            }
            let data = await orgRequest.post(options)
            return data
        };
    }
  • 请求截图
    2018-04-27 3 43 17

以上接口转发就完成,部署在服务器上,用pm2 启动文件,然后nginx转发就可以了。

  • 代码地址,切换dev 分支查看
    打开项目
    https://github.com/bienvenidoY/nodeapi-test
@Lanveer
Copy link

Lanveer commented Aug 2, 2018

简单明了

@Lanveer
Copy link

Lanveer commented Aug 16, 2018

//node请求真实服务器
get login() {
return async function (option) {
let options = {
uri: this.baseUrl + '/session',
json: option
}
let data = await orgRequest.post(options)
return data
};
}

这里的get是什么意思呢?

@bienvenidoY
Copy link
Owner Author

@Lanveer 就是js 的getter

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants