中间件req.params没有提取正确的价值

时间:2015-02-12 06:29:35

标签: javascript node.js express

// 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 ...我不知道如何解决这个问题....

1 个答案:

答案 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});