中间件要求参数未拉取正确的值

Middleware req.params not pulling the right value

本文关键字:参数 中间件      更新时间:2023-10-04
// 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});