【问题标题】:how to pass callback data to koa ctx.body?如何将回调数据传递给 koa ctx.body?
【发布时间】:2020-05-05 16:51:24
【问题描述】:

我正在使用带有 nodejs 的 Typescript。我有 callback function,当我控制台时,我正在将数据作为正文中的一个对象。我想在ctx.body 的数据键中传递数据。我可以将 object 推送到其他 variable 然后传递给 ctx.body 吗?

router.post('/api/send_otp', async (ctx: Koa.Context, next: () => Promise<any>) => {
        var phone = ctx.request.body.phone;

        if (!phone) {
            ctx.body = {
                message: "Please enter phone number",
            };
        } else {

    var options = {
        url: '',
        method: 'POST',
        auth: {
            'user': '',
            'pass': ''
        },
    };

    const callback = function(error, response, body) {
        if (response) {
            console.log(body); // Getting data here
        }else{
            console.log('error',error);
        }
    };

    request(options,callback);

    ctx.body = {
        data: body,   //I want data here
    }
});

【问题讨论】:

  • @Lux 我尝试了一些解决方案,但对我不起作用。
  • 您需要将request 转换为promise 风格的函数。然后你可以await它。 (当你使用 koa 时,你应该在一个 async 函数中。对于较旧的 koa 版本 yield 它)
  • @Lux 你能编辑我的问题吗?所以我可以很容易地理解如何做到这一点。
  • 你能贴出包装koa的代码吗?

标签: javascript node.js koa ctx


【解决方案1】:

您可以将您的回调样式转换为 Promise 并这样做

const options = {
  "url": "",
  "method": "POST",
  "auth": {
    "user": "",
    "pass": ""
  }
};

function makeCall() {
  return Promise((resolve, reject) => {
    request(options, (error, response, body) => {
      if (response) {
        resolve(body);
      } else {
        reject(error);
      }
    });
  });
}

makeCall
  .then(body => {
    ctx.body = {
      "data": body   // I want data here
    };
  });


请注意,不再维护请求,因此最好使用一些现代软件包,例如 gotaxios

【讨论】:

  • 错误:严格模式下的块内不允许函数声明
  • 在函数 makeCall.
  • @MawWii 看到这个链接 - stackoverflow.com/questions/33359840/… 这是你文件顶部的use strict
  • 我假设您在处理程序之外拥有此功能?
  • 我没有使用use strict,但我的文件是打字稿
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多