在Express中转义/:路由以加载js和css

Escaping /: routes in Express in order to load js and css

本文关键字:加载 js css 路由 Express 转义      更新时间:2023-09-26

使用/:表示法时,如何在Express和Node.js中转义路由?我在做什么:

app.get('/:route1/:route2', function(req, res){
  var route1 = req.params.route1;
  var route2 = req.params.route2;
  MongoClient.connect(MongoUrl, function(err, db) {
        if(err) throw err;
        db.collection(route1)
        .findOne({'_id' : new ObjectID(route2)},
            function(err, doc){
                res.send(doc);
            });
        });;

但是这样做就不会加载js或css。我尝试过如果声明无效:

if(req.params.route1 !== 'javascripts'){//then do something}

首先,在不知道你在做什么或应用程序的结构的情况下,我不能肯定,但:

你所做的(像/:var1/:var2这样的路线)对我来说是一种代码气味。如果api.function看起来像

if (req.params.var1 == 'foo') {
   // do stuff
} else if (req.params.var1 == 'bar') {
   // do other stuff
}

这并不是构建Express应用程序的正确方式。一般来说,它看起来应该更像

app.get('/foo/:var2', function(req, res) {
    // do stuff
});
app.get('/bar/:var2', function(req, res) {
    // do other stuff
});

也就是说,如果你真的需要让你的路由处理程序忽略某个值,你可以调用next:

app.get('/:route1/:route2', function(req, res, next) {
    if (req.params.route1 == 'javascripts') next();
    else {
        // do something
    }
});

您是否使用连接静态中间件?

app.use(express.static(__dirname + 'public'))

这表示"对/public文件夹中的文件的任何请求,都将其作为静态文件"。

请确保它显示在任何app.get路由上方,以便首先使用它。

您应该将静态中间件移动到路由之上

app.use(express.static(path.join(__dirname, 'public')));
app.use(app.router);
app.get('/:route1/:route2', api.function);