Expressjs 在中间件中设置cookie

Expressjs set cookies in middleware

我有一个小问题。

我正在使用 MaxMind 获取用户所在的国家/地区,并以这种方式将国家/地区存储在 cookie 中:

exports.countryCookie = function(req, res, next) {
  if (req.cookies.country === undefined) {
    var ip = (req.header('X-Forwarded-For') || req.connection.remoteAddress).toString();
    if (ip !== undefined) {
        satelize.satelize({ip: ip}, function(err, geoData) {
          if (err) return next();
          res.cookie('country', geoData.country);
          next();
        });
    } else {
        next();
    }
  } else {
    next();
  }
};

我的家庭控制器:

exports.index = function(req, res) {
    var country = req.cookies.country;

    console.log(country);

    if (country !== undefined) {
      // do something...
    } else {
      // do something else...
    }
}

路由:

app.get('/', myMiddleware.countryCookie, HomeController.index);

问题是:

第一次加载时 console.log(country)undefined 但 Cookie 是在浏览器上设置的...

刷新后不再undefined。 如何在第一次加载页面时从 homeController 读取 cookie?

中间件似乎与 homeController 一起触发,但它错过了 cookie...

您可以在调用 next() 之前执行 req.cookies.country = geoData.country;