저는 NodeJS를 처음 접했고 AWS Lambda에서 간단한 알렉사 서비스를 작성하여 집에서 온도를 알려주고 있습니다. 나는 내가 붙어있다 문제에 충돌 한 - 나는 홈 오토메이션 온도에 대한 몇 가지 데이터를 쿼리에 대한 HTTPS 엔드 포인트와 통신 할 때 - 내 노드 응용 프로그램이 오류와 함께 종료 :NodeJS, GET 요청시 TLSSocket.socketOnData에서 구문 분석 오류를 디버깅하는 방법?
Error: Parse Error
at TLSSocket.socketOnData (_http_client.js:362:20)
at emitOne (events.js:96:13)
at TLSSocket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at TLSSocket.Readable.push (_stream_readable.js:134:10)
at TLSWrap.onread (net.js:551:20)
이 상당히 간단하다 https를 통해 GET 요청을 보내면 엔드 포인트의 제공자는 Python을 사용하여 문제가 발생하지 않습니다. 내 노트북에서 로컬 노드 설정으로 코드 이동을 시도했지만 여전히 문제가 있습니다 (AWS가 아닙니다). 그것은 HTTPS 및 내 contral 밖에서 서비스로 응답을 일부 미묘한 방식으로 손상된 경우 사이트 wireshark 쉽게 wireshark 수 없습니다 - 그러나 나는 브라우저에서 실행할 수있는 코드를 변환 할 Browsify 사용하여 시도했다. wireshark) 그리고 물론 작동하고, 나는 json 응답에 대해 이상한 것을 볼 수 없다.
노드의 핵심 https 라이브러리 대신 응답 모듈을 사용해 보았지만 동일한 기본 오류가 발생합니다.
나는 내가 할 수있는 일에 열중하고있다. 그리고 이것을 디버깅하는 방법을 모른다. 그것은 포맷팅 문제 또는 타이밍 문제로 저를 강타합니다. 그러나 어떻게 접근해야할지 모르겠습니다. 누구 아이디어?
내 코드는 다음과 같습니다 : 노드에서 실행하면
는var https = require('https');
var crypto = require('crypto');
function executeHttpRequest(path, data, method, username, password) {
var encodedLogin = getLoginString(username,password);
var stringData = JSON.stringify(data);
var requestOptions = {
host: 'hub-server.domain.co.uk',
port: 443,
path: path,
method: 'GET',
headers: {
'Cache-Control': 'no-cache',
'Accept': 'application/json, text/plain, */*',
'Authorization': 'Basic ' + encodedLogin
}};
var request = https.request(requestOptions, function(response) {
var body='';
response.setEncoding('utf8');
response.on('error', function(err){
console.log(method + " error: \n", err.stack);
});
response.on('data', function (chunk) {
console.log("read data: " + chunk);
body += chunk
});
response.on('end', function() {
console.log("end data");
});
});
request.on('error', function(err) {
console.log('request error: \n' + err.stack);
});
console.log("sending request:" + JSON.stringify(requestOptions));
console.log("with data: " + stringData)
request.write(stringData);
request.end();
console.log("closed request")
}
나는 비슷한 PUT 명령과 같은 오류가 다음과 같은 출력
sending request:{"host":"hub-server.domain.co.uk","port":443,"path":"/zone/1","method":"GET","headers":{"Cache-Control":"no-cache","Accept":"application/json, text/plain, */*","Authorization":"Basic bWFjdGEyOmY0OWZiODJlYTcyNWYzNDgwMTViODVjZTNlZmIyYmY1MWE4ZmI3YWUxMzJmZTRkNDk4OGEc"}}
closed request
request error:
Error: Parse Error
at TLSSocket.socketOnData (_http_client.js:362:20)
at emitOne (events.js:96:13)
at TLSSocket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at TLSSocket.Readable.push (_stream_readable.js:134:10)
at TLSWrap.onread (net.js:551:20)
를 얻을. 흥미롭게도 PUT을 사용할 때 매개 변수를 놓친 경우 서버가 JSON 오류로 응답하면 위의 코드가 작동하여 오류를 설명하는 JSON이 표시됩니다. 마찬가지로 잘못된 URL이나 잘못된 AUTH를 사용하면 적절한 상태 코드를 올바르게 얻을 수 있습니다.
https://www.google.com을 타격하고 검색을하면 내 코드가 작동하는 것 같습니다.
분명히 뭔가가 있습니다.하지만 노드 코드를 수정하거나 엔드 포인트 작성자에게 어떻게 조언 할 수 있습니까?