// set a cookie to requested locale
var setLanguage = function(req, res, next) {
if (req.params.locale === undefined) {
req.params.locale = 'pt';
res.cookie('locale', 'pt');
} else {
req.params.locale = req.params.locale;
res.cookie('locale', req.params.locale);
}
setTimeout(function() {
next();
}, 2000);
};
app.get('/:locale?', setLanguage, function (req, res) {
console.log(req.cookies.locale);
res.render('index');
});
我根据req.params.locale制作了这个自定义中间件来加载语言,渲染是可以的,但是这个代码有问题而且我不确切知道是什么。
当我尝试访问例如:/,将工作pt,因为是默认值..但是当我尝试访问/ en之后,pt将呈现,但如果我尝试访问英语后,会正常工作。
我不知道为什么会这样,有人知道????
更新 -
我正在使用morgan进行调试,并在此处输入console.log:
app.get('/:locale?', setLanguage, function (req, res) {
console.log(req.cookies.locale);
res.render('index');
});
当我尝试访问/:
时pt
GET / 304 28.069 ms - -
之后,如果我尝试访问/ en:
GET / 200 21.543 ms - 153
pt
GET /en 304 8.730 ms - -
pt
GET /en 200 2.612 ms - 153
现在,我要回到/ pt:
GET /en 200 2.612 ms - 153
en
GET /pt 200 3.984 ms - 159
en
GET /pt 200 2.498 ms - 159
任何人都知道造成这种情况的原因是什么?
更新 -
我正在使用此module。
使其运作的代码是:
app.get('/', function (req, res) {
res.render('index');
});
// set a cookie to requested locale
app.get('/:locale', function (req, res) {
res.cookie('locale', req.params.locale);
res.redirect('/');
});
这是一种改变语言的愚蠢方式,因为我将在每个接收语言环境参数的路由中重复我的自我,所以我试图使用中间件:
中间件:
function setLanguage (req, res, next) {
req.params.locale = req.params.locale || 'pt';
res.cookie('locale', req.params.locale);
next();
}
我可以在我想要的每条路线中调用此中间件,例如:
app.get('/:locale?', setLanguage......
app.get('/other/:locale?', setLanguage......
app.get('/something/locale?', setLanguage......
但是这使得语言没有改变,我需要重新加载页面twices ...我不知道如何解决这个问题....
答案 0 :(得分:0)
删除'?'在您在node.js代码中定义REST API的URL中,它将正常工作:
app.get('/:locale', setLanguage, function (req, res) {
console.log(req.cookies.locale);
res.render('index');
});
除了检查undefined的方式不正确之外,你可以这样做:
if (req.params.locale) {
//Rest of your code
}
更新(试试这个):
// set a cookie to requested locale
var setLanguage = function(req, res) {
var locale = req.params.locale || 'pt';
res.cookie('locale', locale);
}
res.render('index');
};
app.get('/:locale', setLanguage});