Node.js res.send不是函数(微信小程序)

时间:2018-06-29 08:53:57

标签: node.js backend

我正在为前端编写一个api,过程是,前端向后端发送一个字符串,在解码后端后将代码发送回去。

        const router = require('koa-router')({
            prefix: '/weapp'
        });

        router.post("/openid", async (req, res) => {
        const Ut = require("../common/utils");
        try {
            let grant_type = 'authorization_code'
            let appid = config.appId
            let secret = config.appSecret
            let code = req.accept.headers.accept
            console.log('req code: ', code);
            let opts = {
                url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' + code + '&grant_type=' + grant_type
            }
            let r1 = await Ut.promiseReq(opts);
            r1 = JSON.parse(r1);
            console.log('r1 is:', r1);
            openid = r1.openid
            res.send(openid)
        }
        catch (e) {
            console.log(e);
            res.json('');
        }
      })

res.send(openid)应该发送openid,但是我收到的是{code: -1, error: "res.json is not a function"}。而且我看不到变量res的定义是重载的。请帮帮我〜

2 个答案:

答案 0 :(得分:1)

您的代码被捕获并运行res.json('')。尝试将其更改为res.json(null)或res.json({})

答案 1 :(得分:0)

问题解决了。 代码router.post("/openid", async (req, res) => {使用Express Framework,而微信使用Koa2框架,因此async()中的参数有些不同。 在Koa2中,我们应该写router.post("/openid", async (ctx, next) => {。在这种情况下,ctx.response和ctx.request分别表示express中的res和req。