中间件要求参数未拉取正确的值
Middleware req.params not pulling the right value
// 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将呈现,但是如果我之后尝试访问英语,将正常工作。
我不知道这是为什么,有人知道????
更新-
我正在使用摩根进行调试,并在此处放置了一个控制台.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
有谁知道是什么原因造成的?
更新--
我正在使用这个模块。
使其工作的代码是:
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('/');
});
这是一种改变语言的愚蠢方式,因为我将在接收 locale 参数的每个路由中重复我自己,所以我尝试使用中间件:
中间件:
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......
但这会使语言不会改变,我需要重新加载页面两次......我不知道究竟如何解决这个问题....
删除在
节点.js代码中定义 REST API 的 url 中的"?",它将正常工作:
app.get('/:locale', setLanguage, function (req, res) {
console.log(req.cookies.locale);
res.render('index');
});
除了检查未定义的方式不正确之外,您还可以简单地这样做:
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});
相关文章:
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 什么'在Express中路由时,应用程序级中间件和路由器级中间件之间的区别是什么
- Redux中间件在next()之前更改状态
- 快速的套接字 io 实例/中间件
- 如何使用Express'正确加载图像;s的静态中间件
- 如何在快递中制作中间件的动态链.js
- 在 Redux 中,在商店中应用中间件未正确称为化简器
- 意思是.JS中间件中的猫鼬填充不起作用
- "Cookies的这个实例“;在nodejs cookie中间件的源代码中
- 中间件要求参数未拉取正确的值
- Express v4:如何在参数中间件之前运行特定于路由的中间件
- Meteor WebApp中间件:传递参数
- Express.js中间件额外(第四个)参数
- 从中间件传递参数到表示路由器
- 创建更新请求对象的Express参数中间件
- 向redux中间件发送2个参数,而不是一个操作
- 在快速中间件中提供自定义参数
- Javascript通过中间件传递一些参数,不受影响
- 在Redux中间件中使用React-router获取url参数
- 检查Node.js中间件的强制参数