首页 > 解决方案 > 当我发送 res.send(body)

问题描述

app.post('/getDetails', async function (req, res) {
    var body
    var post_req = await https.request(post_options, function (res) {
        res.setEncoding('utf8');
        body = '';
        res.on('data', function (chunk) {
            body += chunk;
            console.log(body);
            console.log(JSON.parse(body));
            newBody = body;
        }).on('error', function (error) {
            console.log(error)
        });
    });
    post_req.write(requestBody);
    post_req.end();
    res.send(body);

});

res.send(body) 正在发送未定义我在 res.send(body) 之前放置了一个 console.log(body) 它显示未定义,并且在变量 post_req 中,body 具有价值

标签: javascriptnode.js

解决方案


正如我在评论中提到的,您正在尝试将 Async-Await 与回调一起使用。您不能将 Async-Await 语法与回调一起使用。将 Async/Await 与 Promise 一起使用。

您必须为回调编写承诺包装器,或者您可以使用 request-promise 模块返回承诺。

承诺包装:

app.post('/getDetails', async function (req, res) {
    var body

    function httpReq(post_options){
      return new Promise(function(resolve, reject){
         https.request(post_options, function (res) {
            res.setEncoding('utf8');
            body = '';
            res.on('data', function (chunk) {
               body += chunk;
               console.log(body);
               console.log(JSON.parse(body));
               newBody = body;
               resolve();
            }).on('error', function (error) {
               console.log(error)
               reject()
            });
         });
      })
    }

    var post_req = await httpReq(post_options)
    ...
    ...
    res.send(body);

});

推荐阅读