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;
。
我有一个小问题。
我正在使用 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;
。