回调无法正常运行NodeJS ExpressJS

时间:2018-04-10 15:01:31

标签: javascript node.js express

我正在使用ExpressJS和NodeJS创建一个API,试图绕过回调。不知怎的,当通过Postman API调用时,Callback没有返回请求结果。可能是什么问题

router.get('/products', PipedriveController.pipedriveAllProducts)

// Export the router

module.exports = router;

var request = require('request');
var results;

function logRes(){
    console.log(results);
    return results
  }


function readResult(callback){
request('https://jsonplaceholder.typicode.com/posts/1', function(err, response, body){
    results=body;
    callback();
});
}


exports.pipedriveAllProducts = function(req, res, next){
    // let family = req.param.options;

    try {


        let all_products = readResult(logRes)



        //  Return All product liist with Appropriate HTTP header response
        return res.status(200).json({status: 200, all_products});
    } catch(e){

        // Return an Error Response Message
        return res.status(400).json({status: 400, message: e.message});
    }


}

我使用API​​时的My Postman API输出

结果:

{
    "status": 200
}

我应该期待状态200& API JSON输出

2 个答案:

答案 0 :(得分:1)

您必须管理异步调用,您可以使用javascript Promise:

function readResult() {
    return new Promise((resolve, reject) => {
        request('https://jsonplaceholder.typicode.com/posts/1', (err, response, body) => {
            if(err) reject(err);

            resolve(body);
        });
    });
}

exports.pipedriveAllProducts = function(req, res, next) {
    readResult()
        .then(
            products => res.status(200).json(products),
            err => res.status(404).json(err)
        ).catch(err) { res.status(500).send('Unexpected server error') }
}

我在这里使用箭头函数来获得更易读的代码。

如果您想了解有关Promises的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise 或箭头功能:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

答案 1 :(得分:0)

如果您的申请的其他部分工作正常,这是您应该在此处进行的更改

router.get('/products', PipedriveController.pipedriveAllProducts)

// Export the router

module.exports = router;

var request = require('request');



function readResult(callback){
 request('https://jsonplaceholder.typicode.com/posts/1', function(err, 
   response, body){
    callback(err, body);
 });  
}


 exports.pipedriveAllProducts = function(req, res, next){
   // let family = req.param.options;


    readResult(function(err, result){
       if(err){
          return res.status(400).json({status: 400, message: e.message});
             }else{
             return res.status(200).json({status: 200, all_products});
              }
    })

}


}

您应该尝试使用更新的节点库,例如async await或promises。