Javascript NodeJS正在以百分号开头的路由上引发错误

Javascript NodeJS正在以百分号开头的路由上引发错误,javascript,node.js,express,Javascript,Node.js,Express,我有一个服务器编写的NodeJS,其中后端设置如下 app.use(express.static(__dirname)) app.get('/', function(req, res){ res.send('main page here') }); app.get('/*', function(req, res){ res.send('404 dude') }); app.use(function(err, req, res, next){ console.error(err.

我有一个服务器编写的NodeJS,其中后端设置如下

app.use(express.static(__dirname))

app.get('/', function(req, res){
  res.send('main page here')
});

app.get('/*', function(req, res){
  res.send('404 dude')
});

app.use(function(err, req, res, next){
  console.error(err.stack);
});
当我在/%点击服务器时,我得到以下堆栈跟踪:

Error: Bad Request
    at SendStream.error (/Users/danielchao/code/node/node_modules/express/node_modules/send/index.js:239:16)
    at SendStream.pipe (/Users/danielchao/code/node/node_modules/express/node_modules/send/index.js:411:32)
    at serveStatic (/Users/danielchao/code/node/node_modules/express/node_modules/serve-static/index.js:107:12)
    at Layer.handle [as handle_request] (/Users/danielchao/code/node/node_modules/express/lib/router/layer.js:82:5)
    at trim_prefix (/Users/danielchao/code/node/node_modules/express/lib/router/index.js:270:13)
    at /Users/danielchao/code/node/node_modules/express/lib/router/index.js:237:9
    at Function.proto.process_params (/Users/danielchao/code/node/node_modules/express/lib/router/index.js:312:12)
    at /Users/danielchao/code/node/node_modules/express/lib/router/index.js:228:12
    at Function.match_layer (/Users/danielchao/code/node/node_modules/express/lib/router/index.js:295:3)
    at next (/Users/danielchao/code/node/node_modules/express/lib/router/index.js:189:10)
为什么我的静态资产处理程序在这个问题上出错?理想情况下,应该将其作为404处理。

%是url中的转义字符


如果你想在你的url中输入一个文本%,那么使用这个:%25

我不关心如何引用一个正确的url,我关心的是当有人在url/%点击我的服务器时,我的静态处理程序会抛出一个异常,当它不应该出现时。它应该在我的中间步骤中进入下一步。是的,静态资产处理程序不应该这样杀戮。您使用的是什么版本的Express?这是最新版本,所以是Express 4.10.1。不确定这是否重要,但我使用的是节点版本0.10.24,我做了更多的挖掘,罪魁祸首就在这里。发送模块将坏URI作为错误处理,这很好,而服务静态模块只是传递这个错误,因此除非在其他地方被捕获,否则它只传递整个中间件堆栈。我认为,SERVICE static确实应该接受忽略坏URI的选项,但这是一个架构问题。我的中间解决方案是将其添加到中间件堆栈中:app.usefunctionerr,req,res,next{err.status==400?res.render'404':nexterr};