2016-11-24 11 views
0

NodeJS와 get 요청을 처리하는 API가 있습니다.라우터에서 인코딩 된 URL을 가져 오면 NodeJS Express 서버가 충돌합니다.

... 
var apiRoutes = express.Router(); 

apiRoutes.get("/filter/:name",function(req, res){ 
    // do something 
    res.json(result); 
} 

app.use('/api', apiRoutes); 
클라이언트에서 다음

(안 중요한 정보하지만 Angular2입니다) :

find(name:string): void{ 
    name.trim(); 
    this.http.get(encodeURI('http://server_address/api/filter/' + name))... 

그것은 위해서 등 공백을 포함하지 않는 매개 변수에 대해 잘 작동이 작업을하게 또한 간격을 둔 입력, 나는 encodeURI 기능을 사용했습니다. 그러나 공백 문자를 입력하면 서버에 오류가 발생합니다.

undefined:0 

^ 
SyntaxError: Unexpected end of input 
    at Object.parse (native) 
    at IncomingMessage.<anonymous> (/user/home/server/server.js:65:28) 
    at IncomingMessage.EventEmitter.emit (events.js:117:20) 
    at _stream_readable.js:920:16 
    at process._tickCallback (node.js:415:13) 

문제를 해결하려면 어떻게해야합니까?

답변

1

문제를 발견했습니다. 내가 좋아하는 뭔가를하고 있었다 :

apiRoutes.get("/filter/:name",function(req, res){ 
    http.request(anotherURL + req.body.name)... 
} 

을 그리고 그것이 클라이언트로 인코딩 된 이후 name 매개 변수가 이미 인코딩 생각했다. 그러나 나는 그것을 다시 서버에서 인코딩해야 볼 수 있습니다.

apiRoutes.get("/filter/:name",function(req, res){ 
    http.request(anotherURL + encodeURI(req.body.name))... 
}