2016-09-21 78 views
3

我猜想一個新手問題。我想在我的快遞網站上設置和獲取Cookie。節點js/express(本地主機)上未定義餅乾

cookieParser已建立並似乎運行。但我的cookies始終未定義。那麼有什麼可能是錯的?本地主機不工作嗎? 我可以在控制檯上訪問chrome上的所有cookie。

我已經嘗試了httpOnly:false/true。

這裏是我的代碼:

var express = require('express'), 
    exphbs = require('express-handlebars'), 
    bodyParser = require('body-parser'), 
    cookieParser = require('cookie-parser'), 
    request = require('request'), 
    livereload = require('express-livereload'), 
    port = Number(process.env.PORT || 3000); 

var log = require('./lib/log.js')); 

var app = express(); 

livereload(app, config = {watchDir: process.cwd()}); 

app.engine('handlebars', exphbs({defaultLayout: 'main'})); 
app.set('view engine', 'handlebars'); 

app.use(express.static('public')); 
app.use(cookieParser()); 
app.use(bodyParser.urlencoded({ extended: true})); 

app.get('/', function(req, res) { 

    res 
     .cookie('cart', 'test', {maxAge: 900000, httpOnly: false}) 
     .render('index'); 

    console.log(res.cookie.cart); 

}); 


app.listen(port, function() { 

    log.clear(); 
    log.out('Express on http://localhost:' + port); 
    log.hr(); 

}); 

任何線索?

+0

你可以發佈你的app.js文件代碼嗎? – abdulbarik

+0

當然!剛剛更新了這篇文章。 – arpo

回答

3

也許你應該改變:

console.log(res.cookie.cart); 

到:

console.log(req.cookies.cart); 

我只是寫了一個簡單的例子,證明了這是怎麼回事:

var express = require('express'); 
var cookieParser = require('cookie-parser'); 
var app = express(); 
app.use(cookieParser()); 
app.get('/', function(req, res) { 
    var oldCookie = req.cookies.test; 
    var newCookie = (oldCookie|0) + 1; 
    res.cookie('test', newCookie, {maxAge: 900000}); 
    res.status(200).json({ 
    newCookie: newCookie, 
    oldCookie: oldCookie, 
    reqCookie: req.cookies.test, 
    }); 
}); 
app.listen(3000, function() { 
    console.log('Listening on http://localhost:3000/'); 
}); 

當你運行它,去用你的瀏覽器到http://localhost:3000/你會看到:

{"newCookie":1} 

當你重新加載頁面,你會看到:

{"newCookie":2,"oldCookie":"1","reqCookie":"1"} 

這裏是發生了什麼事情:在打印之前,即使你設置Cookie在你處理程序中的第一個請求是沒有真正建立,但 - 它只是排隊要傳遞到客戶端與HTTP頭像這樣的響應:

Set-Cookie: test=1; Max-Age=900; Path=/; Expires=Wed, 21 Sep 2016 13:03:06 GMT 

在你看到在reqCookie舊值和在newCookie新值的第二請求 - 這些值是不同的。選擇cookie並不會改變您在請求中獲得的那個。我甚至包含了reqCookie,它不存儲在一個變量中,但是在調用res.end()期間直接從req.cookies訪問,以證明它沒有被改變。

+0

是的!而已。謝謝。 – arpo

+1

@arpo很好聽。我在回答中添加了一個示例來顯示發生了什麼。 – rsp