Nodejs发送外部API POST请求

时间:2016-08-09 07:39:41

标签: angularjs node.js express post https

我正在尝试从我的angularjs控制器向nodejs服务器发送POST请求,然后该服务器应该向外部API发送完整的POST请求,这样可以避免CORS请求,并使其更加安全,因为我在在此POST请求中发送相对私有的数据。

我的angularjs控制器函数用于向nodejs服务器发出post请求,看起来像这样,它工作正常:

var noteData = {
    "id":accountNumber,
    "notes":[
        {
            "lId":707414,
            "oId":1369944,
            "nId":4154191,
            "price":23.84
        }
    ]
}

var req = {
    method: 'POST',
    url: '/note',
    data: noteData
}

$http(req).then(function(data){
    console.log(data);
});

现在问题在于我的nodejs服务器,我似乎无法弄清楚如何正确发送带有自定义标头的POST请求并传递JSON数据变量..

我使用nodejs https功能,因为我需要访问的网址是https而不是http,我也尝试了请求功能而没有运气。

我知道我发送的网址和数据是正确的,因为当我将它们插入Postman时,它会返回我希望它返回的内容。 以下是我对nodejs服务器的不同尝试:

使用body-parser

正确解析和检索angularjs请求中的数据

尝试使用请求:

app.post('/buyNote', function (req, res) {
var options = {
    url: 'https://api.lendingclub.com/api/investor/v1/accounts/' + accountNumber + '/trades/buy/',
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': apiKey
    },
    data = JSON.stringify(req.body);
};


 request(options, function (error, response, body) {
     if (!error) {
         // Print out the response body
         // console.log(body)
         console.log(response.statusCode);
         res.sendStatus(200);
     } else {
         console.log(error);
     }
 })

由于某种原因,它返回状态代码500,它错误地发送数据,因此导致服务器错误......

使用https

var options = {
    url: 'https://api.lendingclub.com/api/investor/v1/accounts/' +    accountNumber + '/trades/buy/',
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': apiKey
    }
   };
   var data = JSON.stringify(req.body);


var req = https.request(options, (res) => {
 console.log(`STATUS: ${res.statusCode}`);
 console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
 res.setEncoding('utf8');
 res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
 });
 res.on('end', () => {
console.log('No more data in response.');
 });
  });

req.on('error', (e) => {
console.log(`problem with request: ${e.message}`);
 });


req.write(data);
req.end();

由于某些原因,Https尝试返回301状态......

在Postman中使用相同的数据,标题和网址会返回一个成功的响应200,其中包含我需要的数据......

我不明白我怎么能做一个简单的http请求......

请注意:这是我第一个使用nodejs和angular的项目,我知道如何在php或java中轻松实现这样的东西,但这让我感到难以置信..

1 个答案:

答案 0 :(得分:4)

所以经过大量的讨论和尝试不同的事情后,我终于找到了性能良好的解决方案,并且完全符合我的要求而不会使事情变得复杂:

使用名为request-promise的模块就是诀窍。这是我用于它的代码:

const request = require('request-promise');

const options = {
    method: 'POST',
    uri: 'https://requestedAPIsource.com/api',
    body: req.body,
    json: true,
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'bwejjr33333333333'
    }
}

request(options).then(function (response){
    res.status(200).json(response);
})
.catch(function (err) {
    console.log(err);
})