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

时间:2015-10-31 22:40:16

标签: javascript node.js express url-routing

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

我正在启用静态托管:

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

然后我有一个通配路线:

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

此路线适用于" /about"等网址。和" /contact" - 我想要的。但它似乎也试图匹配" /style.css"和其他静态资产文件 - 这是不必要的。

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

2 个答案:

答案 0 :(得分:2)

我找到的一个解决方案是搜索“。”在查询内部,然后设置一个标志,如果找到它:

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(); 

});

但我想找到一个更清晰的解决方案,可能在router.get?

中使用正则表达式

答案 1 :(得分:-1)

如果我理解你想做什么,你应该做的事情如下:

app.js

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

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