2016-10-27 1 views
-1

노드 v6.2.0을 사용하여 Express 4.14.0을 사용하십시오.노드 익스프레스 - 인코딩 된 URL 쿼리 문자열 지원 방법

으로 사이트의 URL을 입력 : 내가하여 쿼리 값을 얻을 수있어 'http://site.name/?key=value'

app.get('/', function (req, res) { 
    // req.query.key equals 'value' 
}); 

그러나 인코딩 된 URL을 입력 할 때하는 'http://site.name/?key%3Dvalue이'는 req.query 객체는 다음과 같습니다 :

{ 'key%3Dvalue' : '' } 

URL을 올바르게 구문 분석하기 위해 노드 req.query를 만드는 방법이 있습니까? 아니요,이 쿼리 값을 추출하는 기본 방법은 무엇입니까?

+1

올바르게 구문 분석하고 있습니다. '='를 '% 3D'로 인코딩하는 전체 요점은 키를 값에서 나누는 문자가 아닌 * 데이터 *로 처리된다는 것입니다. 그렇지 않으면'= '기호를 제출할 방법이 없습니다. – Quentin

+1

"="을 인코딩 할 필요가 없습니다. 구분 기호가 값 자체가 아닌 경우. – Sikorski

답변

0

주석에서 알 수 있듯이 구문 분석이 정확하며 % 3D를 키 구분 기호로 디코딩하면 안됩니다.

이 경우에는 인코딩 된 URL로 주소에 도달하려고 시도한 클라이언트가 이미 있습니다 (클라이언트 버그로 인해). 그래서 '% 3D'를 '='으로 구문 분석하기 위해 서버에 임시 처리기를 추가했습니다.

const value = req.query.key || 
    url.parse(req.url.replace('%3D', '='), true).query.key; 

클라이언트가 수정과 새 버전을 롤아웃 할 때, 나는 서버에서이 핸들러를 제거하고 오직 req.query.key 그것이 있어야로 사용할 수 있습니다.