Angularjs 在express中的一篇帖子中获得两个回复

Angularjs 在express中的一篇帖子中获得两个回复,angularjs,json,node.js,express,response,Angularjs,Json,Node.js,Express,Response,我想我有一个愚蠢的问题,但我不知道如何解决这个问题。在express中的一篇文章中,我想向另一台服务器发送两个请求,并希望得到客户端的两个响应(在我的例子中是angular)。我尝试创建两个res.send(body),但我得到一个错误错误:发送后无法设置标题。我的问题是:这两个响应是否可能在一个响应中抛出并获取 router.post('/paynow', function(req, res){ request({ method: 'POST', url

我想我有一个愚蠢的问题,但我不知道如何解决这个问题。在express中的一篇文章中,我想向另一台服务器发送两个请求,并希望得到客户端的两个响应(在我的例子中是angular)。我尝试创建两个
res.send(body)
,但我得到一个错误
错误:发送后无法设置标题。
我的问题是:这两个响应是否可能在一个响应中抛出并获取

router.post('/paynow', function(req, res){
    request({
        method: 'POST',
        url: 'https://secure.snd.payu.com/pl/standard/user/oauth/authorize',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: "xyz"
    },  function (error, response, body) {
            console.log('Status:', response.statusCode);
            console.log('Headers:', JSON.stringify(response.headers));
            console.log('Response:', body);
            res.send(body);
      }
    )
    request({
        method: 'GET',
        url: 'https://secure.snd.payu.com/api/v2_1/paymethods/',
        headers: {
            'Authorization': 'xyz'
        }}, function (error, response, body) {
                console.log('Status:', response.statusCode);
                console.log('Headers:', JSON.stringify(response.headers));
                console.log('Response:', body);
                res.send(body);
        }
    ),
})

您不能发送两个响应。但您可以将两个请求结果合并为一个响应。尝试使用承诺:

router.post('/paynow', function(req, res){
  Promise.all([
    new Promise((resolve, reject) => {
      request({
        method: 'POST',
        url: 'https://secure.snd.payu.com/pl/standard/user/oauth/authorize',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: "xyz"
      },  function (error, response, body) {
        if (error) return reject(error)
        resolve(body)
      })
    }),
    new Promise((resolve, reject) => {
      request({
        method: 'POST',
        url: 'https://secure.snd.payu.com/pl/standard/user/oauth/authorize',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: "xyz"
      },  function (error, response, body) {
        if (error) return reject(error)
        resolve(body)
      })
    })
  ]).then(listOfResponses => {
    res.json(listOfResponses)
  })
})

太好了。。。。首先,您不能发送多个响应。i、 e.res.send一次&仅一次

因此,您可以做的是…确定应该首先执行的优先级…在您的情况下,首先授权,然后是支付方法

所以正确的顺序应该是

$.ajax{ 
  url : /authorize,
  type : post,
  data : /same data,
  , success : function(response) {
         //within successs make pay method request as another ajax using the 
         //  response from previous authorize request


           $.ajax{
              url : /paymethods,
              data : response
           }
  }
}
同样地,分开你的路线

router.post('/authorize', function(req, res){
    request({
        method: 'POST',
        url: 'https://secure.snd.payu.com/pl/standard/user/oauth/authorize',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: "xyz"
    },  function (error, response, body) {
            console.log('Status:', response.statusCode);
            console.log('Headers:', JSON.stringify(response.headers));
            console.log('Response:', body);
            res.send(body);
      }
    )}

router.post('/paynow', function(req, res){
       request({
    method: 'GET',
    url: 'https://secure.snd.payu.com/api/v2_1/paymethods/',
    headers: {
        'Authorization': 'xyz'
    }}, function (error, response, body) {
            console.log('Status:', response.statusCode);
            console.log('Headers:', JSON.stringify(response.headers));
            console.log('Response:', body);
            res.send(body);
    }
  )
}