在Express.js中,如何设置通配符路由与资产文件不匹配?

我正在构build我的第一个真正的Express.js应用程序,并坚持路由。

我启用静态托pipe:

app.use("/", express.static("public")); 

然后我有一个通配符路线:

 router.get("/:page", function(req, res) { // do stuff }); 

这条路线是匹配像“ /about ”和“ /contact ”的url – 我想要的。 但它似乎也试图匹配“ /style.css ”和其他静态资产文件 – 这是不必要的。

如何使这个通配符与资产文件不匹配?

我find的一个解决scheme是search“。” 在查询内部,然后设置一个标志,如果它被发现:

 router.get("/:page", function(req, res) { if (req.render_view) res.render("index"); }); router.param("page", function(req, res, next, page) { // if request is not an asset file if (page.indexOf(".") == -1) { // do stuff // set a flag req.render_view = true; } next(); }); 

但我想find一个更清洁的解决scheme,可能在router.get中使用正则expression式?

如果我明白你想要做什么,你应该做一些事情:

app.js

  app.use(express.static(__dirname + '/public')); app.use(express.static(__dirname + '/static')); app.use('/:page',function(){}..) 

这个configuration在你的公共文件夹和静态文件夹是相对于app.js的时候有效,当浏览器请求静态文件的时候,第一个服务器会查看公共文件夹,如果文件是no的话会继续到静态文件夹,最后到/