如何使用express.js路由调用控制器?
app.get('*', function(req, res, next) {
var regExp = /^\/([a-z]{2})(\/|$)/gi,
exec = regExp.exec(req.url);
exec = exec != null ? exec[1] : undefined;
if(exec == undefined) {
// add language prefix to link
}
else {
i18n.setLocale(exec);
// add language prefix to link
}
next();
});
如果我打开页面/关于我需要获取这样的网址:http://example.com/en/about。我该怎么做以及如何显示呼叫'关于'控制器?
app.get('/about', function(req, res) {
console.log('Here is about');
res.send('Hello, World');
});
不合适:app.get('(en|de|ru)/about', ...)
提前致谢。
答案 0 :(得分:3)
您可以执行类似
的操作app.get('/:language/about', function(req, res) {
var language = req.params.language;
i18n.setLocale(language);
});
对于多条路线,您可以这样做
controllers.js
module.exports = {
about: function(req, res) {
res.send('about');
}
}
app.js
var controllers = require('./controllers');
app.all('/:language/:controller', function(req, res) {
i18n.setLocale(req.params.language);
controllers[req.params.controller](req, res);
});
答案 1 :(得分:1)
以下对我很有用,因此语言代码可以是可选的:
var i18n = require('i18n');
server.use(express.static(__dirname + '/client/www'));
server.use('/en', express.static(__dirname + '/client/www'));
server.use('/zh', express.static(__dirname + '/client/www'));
function regexPath(p) {
return new RegExp('(?:/(en|zh))?' + p, 'i');
}
server.use(i18n.init);
server.all('*', function (req, res, next) {
var l = /^\/(en|zh)/i;
if (l.test(req.url)) {
var a = l.exec(req.url);
var local = a[1];
i18n.setLocale(local);
res.setLocale(local);
} else {
i18n.setLocale('zh');
res.setLocale('zh');
}
next();
});
server.get(regexPath('/signin'), function (req, res) {
res.render('sign-in');
});