使用/:表示法时,如何在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}
答案 0 :(得分:0)
您使用的是connect static middleware吗?
app.use(express.static(__dirname + 'public'))
这表示“对/public
文件夹中的文件的任何请求,将其作为静态文件提供”。
确保它显示在任何app.get
路线上方,因此将首先使用它。
答案 1 :(得分:0)
你应该将静态中间件移到路线上方
app.use(express.static(path.join(__dirname, 'public')));
app.use(app.router);
app.get('/:route1/:route2', api.function);
答案 2 :(得分:0)
首先,我不知道你在做什么或你的应用程序是如何构建的,我不能肯定地说,但是:
你在做什么(像/: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
}
});