【问题标题】:How to passing result of http request inside async in ExpressJS?如何在 ExpressJS 中异步传递 http 请求的结果?
【发布时间】:2020-06-16 16:00:16
【问题描述】:

我有以下代码

async send(user, data) {
const postData = {
    'data': 'john',
    'secret': 'secret'
};
const dataJson = JSON.stringify(postData);
const options = {
    hostname: 'example.com',
    path: '/send',
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Content-Length': dataJson.length
    }
};
const req = https.request(options, (res) => {
    let data = '';
    console.log('Status Code:', res.statusCode);
    res.on('data', (chunk) => {
        data += chunk;
    });
    res.on('end', () => {
        console.log('Body: ', JSON.parse(data));
    });
}).on("error", (err) => {
    console.log("Error: ", err.message);
});
req.write(dataJson);
req.end();

//---------------
let postResult = // HERE I WANT TO GET WHAT HTTP POST REQUESTED (e.g dataJson.body?)
//---------------

let result;
try {
    result = await this.users.collection('users').updateOne(
        {
            _id: user
        },
        {
            $set: {
                // I WANT TO USE THAT HERE
                data1 : postResult,
                data2 : data2
            }
        },
        { maxTimeMS: consts.DB_MAX_TIME_USERS }
    );
} catch (err) {
    log.error('DB', 'UPDATEFAIL id=%s error=%s', user, err.message);
    err.message = 'Database Error, failed to update user';
    err.code = 'InternalDatabaseError';
    throw err;
}
return { success: true };
}

如何将这些数据获取到外部变量?

我几乎疯了,一直在谷歌上搜索并没有找到任何东西

我正在使用 express 和 native-http 发出 http 请求,可能有任何 native-curl 吗?

非常感谢大家的帮助

【问题讨论】:

    标签: express https async-await


    【解决方案1】:

    您当前的代码正在使用回调来检索结果,因此您可以将数据变量初始化到外部回调函数

    let data = '';
    const req = https.request(options, (res) => {
    console.log('Status Code:', res.statusCode);
      res.on('data', (chunk) => {
        data += chunk;
      });
      res.on('end', () => {
        console.log('Body: ', JSON.parse(data));
      });
    })
    

    还有其他更简单的方法可以使用 nodejs 发出 http 请求。您可以查看支持 Promise 和 async/await 的 axios

    你可以在 axios 中使用这样的语法

    const response = await axios.get('/user?ID=12345');
    

    更容易。

    【讨论】:

      猜你喜欢
      • 2018-03-09
      • 2023-01-13
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 2016-12-05
      • 2015-07-02
      • 2010-09-12
      • 1970-01-01
      相关资源
      最近更新 更多