当路由器获得编码 URL 时,NodeJS Express 服务器崩溃

NodeJS Express Server crashes when router gets an encoded URL

我有一个 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)

知道我能做些什么来解决它吗?

我想通了。我在做类似的事情:

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))... 
}