노드의 부정한 JSON.parse()를 안전하게 처리한다.
node/express 사용 - JSON 사용.
어떤 이유로 유효하지 않은 JSON이라도 괜찮습니다.false든 뭐든 반환하면 요청을 거부하고 계속 진행합니다.문제는 유효한 JSON이 아닌 경우 구문 오류가 발생한다는 것입니다.통상은 구문 에러를 터뜨리려고 합니다만, 이 경우는 아닙니다.
var boom = JSON.parse(req.headers.myHeader);
스택을 스크래핑하여 특정 모듈로부터의 부정한 해석 콜을 체크하면 해당 모듈이 무시됩니까?그건 좀 미친 것 같아.분명히 더 좋은 방법이 있을 거야.
EDIT: try/catch blocks가 이 오류를 처리하는 방법이라는 것은 알고 있습니다만, 노드 앱에서 가장 좋은 방법입니까?이렇게 하면 노드가 차단됩니까?
은, 을 「JSON」으로 입니다.JSON.parse()
a까지try/catch
다른 옵션은 없습니다.내장 구현에서는 유효하지 않은 JSON 데이터에 대한 예외가 발생합니다.이 예외로 인해 어플리케이션이 정지되는 것을 방지하는 유일한 방법은 이를 포착하는 것입니다.해도 피할 라이브러리는 .서드파티 라이브러리는try/catch
JSON.parse()
디론가가전전전전
유일한 대안은 비활성 데이터 구조에 대해 보다 관대할 수 있는 JSON 구문 분석 알고리즘을 구현하는 것이지만, 이는 작은 핵으로 1입방미터 구멍을 파는 것과 같습니다.
퍼포먼스에 관한 주의
Node.js에서 사용되는 v8 JavaScript 엔진은 다음을 포함하는 함수를 최적화할 수 없습니다.try/catch
업데이트: v8 4.5 이상에서는 시도/캐치를 최적화할 수 있습니다.이전 릴리스에 대해서는 아래를 참조하십시오.
간단한 회피책은 메인 기능을 최적화할 수 있도록 세이프 파싱 로직을 별도의 함수에 넣는 것입니다.
function safelyParseJSON (json) {
// This function cannot be optimised, it's best to
// keep it small!
var parsed
try {
parsed = JSON.parse(json)
} catch (e) {
// Oh well, but whatever...
}
return parsed // Could be undefined!
}
function doAlotOfStuff () {
// ... stuff stuff stuff
var json = safelyParseJSON(data)
// Tadaa, I just got rid of an optimisation killer!
}
JSON 파싱이 산발적으로 이루어지면 퍼포먼스에 큰 영향을 주지 않을 수 있지만 사용량이 많은 기능에서 부적절하게 사용하면 응답 시간이 크게 늘어날 수 있습니다.
차단 중인 시도/캐치에 대한 참고
Node.js의 JavaScript 코드의 every.single.statement는 메인함수, 콜백, 다른 모듈 또는 기타 어떤 것에서 호출되는지에 관계없이 한 번에 한 번만 실행됩니다.따라서 모든 문장이 프로세스를 차단합니다.이것은 반드시 나쁜 것은 아닙니다.잘 설계된 애플리케이션은 대부분의 시간을 외부 자원(데이터베이스 응답, HTTP 통신, 파일 시스템 조작 등)을 기다리는 데 소비합니다.따라서 자주 실행되는 JavaScript 코드를 v8 엔진에 의해 최적화할 수 있으므로 이 차단된 상태에서는 가능한 한 시간이 걸리지 않도록 하는 것이 매우 중요합니다. 성능에 대한 메모를 참조하십시오.
사용할 수 있습니다.try
그리고.catch
function parseMyHeader(){
try {
return JSON.parse(req.headers.myHeader);
} catch(ex){
return null;
}
}
node.js의 JSON.parse 오류를 처리하는 방법은 표준 try/catch를 사용하는 것이 적절합니다.이는 joyent 웹사이트에서 다음과 같은 오류를 처리하는 노드 제작 프랙티스에 기재되어 있습니다.
try/catch를 사용하는 일반적인 경우는 JSON.parse 및 기타 사용자 입력 검증 함수뿐입니다.
이는 알렉산드르가 그의 논평에서 제공한 노드짓츠 링크와도 일치한다.
var parsed;
try {
parsed = JSON.parse(data);
} catch (e) {
parsed = JSON.parse(JSON.stringify(data));
}
root = parsed;
나한테는 잘 먹혔어Catch에서는 데이터를 JSON으로 해석하기 전에 stringify로 변환했습니다.
이것은 예외 중에 스크립트를 깨지 않는 방법에 관한 것입니다.
Promise.resolve((body)=>{
let fbResponse = JSON.parse(body);
// some code for good
}).catch(error => {
cl('Parsing error:');
cl(error);
// some code for bad
});
언급URL : https://stackoverflow.com/questions/29797946/handling-bad-json-parse-in-node-safely
'it-source' 카테고리의 다른 글
woocommerce - 현재 제품 카테고리의 최상위 카테고리를 얻으려면 어떻게 해야 합니까? (0) | 2023.02.12 |
---|---|
jQuery 검증자 및 AJAX를 사용하는 사용자 지정 규칙 (0) | 2023.02.12 |
요소 포커스를 각도 방향으로 설정 (0) | 2023.02.12 |
반응 구성 요소에 iframe 삽입 (0) | 2023.02.12 |
는 Tinymce로 감겨져 .는 Tinymce로 감겨져 .는 Tinymce로 감겨져 .태그. CSS가 돌아다니거나 텍스트 에디터를 해킹하거나 (0) | 2023.02.12 |