2015-01-02 2 views
0

작은 문제가 있습니다.Expressjs는 미들웨어에 쿠키를 설정합니다.

나는 사용자의 국가를 얻기 위해 MaxMind를 사용하고 있는데 나는이 방법으로 쿠키에 나라를 저장 해요 :

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(); 
    } 
}; 

내 HomeController :

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)에서3210

undefined하지만 쿠키는 새로 고침에

undefined 더 이상하지 ... 브라우저에 설정됩니다. 페이지의 첫 번째로드시 homeController에서 쿠키를 읽을 수 있습니까? 미들웨어는 homeController과 함께 해고하고 쿠키를 그리워처럼

당신이 next()를 호출하기 전에 req.cookies.country = geoData.country;을 단지 수

답변

0

... 보인다.

+0

음, 작동합니다. 하지만 ... 왜 작동하는지 알 수 있습니까? 'res.cookie ('country', ...)를 제거하더라도 쿠키를 저장하지 않고 작동합니다 ... 아마도 Express에 대해 매우 중요한 것을 놓친 것일 수 있습니다. –

+0

그것은 인덱스 컨트롤러가 찾고있는 것이기 때문에 작동합니다. – mscdex

+0

ok ...하지만 res.cookie는 쿠키를 설정하고 req.cookies는 해당 쿠키를 가져와야합니다 ... 솔루션에 따라 req.cookie를 사용하여 전역 변수를 설정하고 어디서나 사용하는 것처럼 쿠키를 설정할 수있는 것처럼 보입니다 브라우저 쿠키로부터 어떤 데이터도 얻지 않고 ... –

관련 문제