2012-08-30 25 views
5

Tôi đang cố gắng đặt cookie trên express.js nhưng nó trả lại không xác định. Tôi đã tìm kiếm nhiều trang web và đặt express.cookieParser() ở trên app.use(app.router) nhưng vẫn không thể trả lại giá trị phù hợp.express cookie return undefined

app.js

app.configure(function(){ 
    var RedisStore = require('connect-redis')(express); 
    app.use(express.logger()); 
    app.set('view options', { layout: false }); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.bodyParser({uploadDir: './uploads/tmp'})); 
    app.use(express.methodOverride()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ secret: "william", store: new RedisStore })); 
//Initialize Passport! Also use passport.session() middleware, to support 
//persistent login sessions (recommended). 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    //app.router should be after passportjs 
    app.use(app.router); 
    app.use(express.compiler({ src: __dirname + '/public', enable: ['less']})); 
    app.use(express.static(path.join(__dirname, 'public'))); 
}); 

app.get('/', function(req, res) { 
    res.cookie('cart', 'test', {maxAge: 900000, httpOnly: true}) 
}); 

app.get('/test', function(req, res) { 
    res.send('testcookie: ' + req.cookies.cart); 
}); 

kết quả:

testcookie: undefined 

Trả lời

3

Cookie được đặt trong Tiêu đề HTTP. res.cookie() chỉ đặt tiêu đề cho kết quả HTTP của bạn, nhưng không thực sự gửi bất kỳ HTTP nào. Nếu mã của bạn được mã hóa chính xác và nó chạy, nó sẽ thực sự chỉ ngồi và không trả lại bất cứ điều gì. Tôi cũng cố định một số lỗi cú pháp trong mã của bạn trong app.get() này:

app.get('/', function(req, res) { 
    res.cookie('cart', 'test', {maxAge: 900000, httpOnly: true}); 
    res.send('Check your cookies. One should be in there now'); 
}); 
1

Bạn cần phải gửi một cái gì đó, hoặc ít nhất là gọi res.end(), sau khi cài đặt cookie. Nếu không, tất cả res.cookie() sẽ thêm một số tiêu đề vào danh sách các tiêu đề sẽ được gửi sau này.

0

Set tên cookie để giá trị, nơi mà có thể là một chuỗi hoặc đối tượng chuyển đổi sang JSON. Tùy chọn đường dẫn mặc định là "/".

res.cookie('name', 'tobi', { domain: '.example.com', path: '/admin', secure: true }); 

Dưới đây là liên kết để xem chi tiết hơn

http://expressjs.com/api.html#res.cookie

Các vấn đề liên quan