当路由器获得编码的URL时,NodeJS Express Server崩溃

时间:2016-11-24 13:20:36

标签: node.js express router encodeuricomponent

我有一个NodeJS和一个处理get请求的API。

...
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 个答案:

答案 0 :(得分: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))... 
}