表达将中间件整合到回调响应中

时间:2018-02-14 01:19:14

标签: node.js express callback middleware

我想在回调响应中使用中间件(API调用,不是路由的一部分)。

// MIDDLEWARE EXAMPLE
  var postInvoice = function(req, res){
  function request(callback) {
    var path='/xxx?';
    var data = querystring.stringify( {
      'action' : 'xxx',
        'appkey' : 'xxx'',
        'fromapi' : 'xxx',
        'fromapiuser' : 'xxx',
        'username' : 'xxx',
      'shipmethod' : 'TEST',
      'shipping' : '0',
      'taxes' : '0'
    });
    var options = {
        port: 443,
        host: xxx,
        path: path,
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': data.length
        }
    };
    var postRequest = http.request(options, function(res) {
        res.setEncoding('utf8');
        res.on('data', function (chunk) {
        console.log('Invoice Response: ' + chunk);
        });
    });
    postRequest.write(data);
  }
  request(function(responseData) {
    console.log(responseData);
  });
}

我需要在另一条路径中访问响应(其本身包括通过API进行回调)

app.get('/result', function(req, res){

 var resourcePath = req.param('resourcePath');

 function request(callback) {
  var path = resourcePath
    var options = {
        port: 443,
        host: xxx,
        path: path,
        method: 'GET'
    };
    var postRequest = http.request(options, function(res) {
        res.setEncoding('utf8');
        res.on('data', function (chunk) {
            jsonRes = JSON.parse(chunk);
            return callback(jsonRes);
        });
    });
    postRequest.end();
 }

 request(function(responseData) {

   console.log(responseData);

  // this is where I invoke the middleware,

   if(some response condition is met) {
   postinvoice();
   }

  res.render('result', {
    check: check,
    response: checkout_msg
  });

 });

});

我能够查看发票回复'在控制台中,但我不能在/ result路由中操作它。我希望能够调用中间件,创建本地人并使本地人在/ result route中可用。

谢谢,

1 个答案:

答案 0 :(得分:0)

试试这个

 var postRequest = http.request(options, function (response) {
     var body = '';
     response.setEncoding('utf8');
     response.on('data', function (chunk) {
         body += chunk;
     });
     response.on('end', function () {
         body = JSON.parse(body); //if response is json
         return callback(body);
     });
 });