2016-08-09 3 views
0

anglejs 컨트롤러에서 nodejs 서버로 POST 요청을 보내려고합니다. 그러면 nodejs 서버는 외부 API에 전체 POST 요청을 보내야하며 CORS 요청을 피하고 보안을 강화합니다 이 POST 요청에서 비교적 개인적인 데이터를 보내고 있습니다. nodejs 서버에 POST 요청을 만들기위한Nodejs가 외부 API POST 요청을 보내고 있습니다

내 AngularJS와 컨트롤러 기능은 다음과 같습니다과 그것을 잘 작동합니다 : 난 그냥 알아낼 수없는 경우

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 데이터 변수를 전달하는 방법.

액세스해야하는 URL은 http가 아닌 https이기 때문에 nodejs https 기능을 사용하여 trierd했습니다. 행운과 요청 기능을 시도했다.

내가 보내는 우편물과 데이터는 우편함에 연결했을 때 반환 할 것으로 예상하므로 반환한다는 점을 알고 있습니다. 이것은 일부 상태 코드 (500)를 반환

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); 
    } 
}) 

:

AngularJS와 요청의 데이터 구문 분석 및 검색 요청을 올바로 사용

시도를 몸 파서를 사용하여 : 여기 nodejs 서버 내 다른 시도는 이유는 데이터가 잘못 전송되어 서버 오류가 발생하는 이유입니다 ...

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 개 상태를 반환

동일한 데이터, 헤더 및 우편 배달부의 URL 내가 필요한 데이터와 성공적인 응답 (200)을 돌려 사용 ...

I 돈 내가 간단한 HTTP 요청을 어떻게 만들 수 있는지 이해하지 못한다. ...

참고 :이 프로젝트는 nodejs 및 각도로 작업 한 첫 번째 프로젝트이며, PHP 나 java에서 이와 비슷한 것을 구현하는 방법을 쉽게 알 수있다. 그러나 이것은 나를 괴롭히는 ..

+0

당신은 당신을 위해 리디렉션을 처리 NPM에'request' 모듈, 같은 것을 사용하여 더 나을 수 있습니다 : 여기에 내가 그것을 위해 사용되는 코드입니다. 또한'Authorization' 헤더 값이 실제로 base64로 인코딩 된'username : password' 값인지 확신합니까? – mscdex

+0

귀하의 의견을 주셔서 감사합니다. 나는 첫 번째 시도에서 요청 모듈을 사용하고 있다고 생각합니다. 요청 (옵션, 기능 (오류, 응답, 본문) { if (! error) { // 응답 본문 인쇄 // console.log (본문) console.log (응답 .statusCode); res.sendStatus (200); } else { 콘솔.로그 (오류); } base62로 인코딩되었지만 lendingclub API의 요구 사항에 따라 헤더를 설정하고 Postman 확장자에서 잘 작동하는지 잘 모르겠 음 – BroBan

+0

간단한 get tothe lendC API를 사용해보십시오. json 응답을 로그하고 확인 할 수 있습니까? 게시물로 돌아가서 rc가 500이 아니라면 더 많은 오류가 발생할 경우 respnse 본문을 나열하는 것을 잊지 마십시오. –

답변

2

그래서 많은 o f를 어슬렁 거리고 다른 것들을 시도해 보니 마침내 잘 수행되는 솔루션을 찾았고 복잡하지 않은 이상 정확히 필요한 것을 수행합니다.

request-promise라는 모듈을 사용하면 트릭을 수행 할 수 있습니다. (당신이 301 상태 코드를 얻기 언급 ​​이후)

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); 
}) 
+0

감사합니다. @BroBan! :) –

관련 문제