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

Javascript 转义/:在Express中路由以加载js和css,javascript,node.js,express,Javascript,Node.js,Express,使用/:符号时,如何在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.co

使用/:符号时,如何在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语句,但没有效果:

if(req.params.route1 !== 'javascripts'){//then do something}
你在用电话吗

这表示“对
/public
文件夹中的文件的任何请求,都将作为静态文件使用”


确保它出现在任何
应用程序的上方。获取
路由,以便首先使用它。

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

app.use(express.static(path.join(__dirname, 'public')));
app.use(app.router);

app.get('/:route1/:route2', api.function);

首先,我不知道你在做什么,也不知道你的应用程序是如何构造的,我不能肯定,但是:

你所做的(比如
/: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
    }
});

你说它不会加载js或css是什么意思?我建议不要在
路由器之前使用
静态
,因为。我建议不要在
路由器之前使用
静态
app.get('/:route1/:route2', function(req, res, next) {
    if (req.params.route1 == 'javascripts') next();
    else {
        // do something
    }
});