2017-08-29 62 views
0

我只想嘗試基本方法來設置cookie並在請求頭中顯示。當使用Express 4.x的res.cookie時,請求標頭無法獲取cookie。

前端只是一個帶有用戶名和密碼文本輸入的基本html表單,使用POST方法傳輸數據。

下面是基於express的代碼。

服務器剛剛接收req.body,然後將其設置爲與域cookie:本地主機:1338 /鹼

cookieRouter.js:

var express = require('express'); 
var bodyParser = require('body-parser'); 
var cookieParser = require('cookie-parser'); 
var router = express.Router(); 
router.use(bodyParser.urlencoded({ extended: false })); 
router.use(cookieParser()); 

router.get('/', function (req, res) { 
    res.send('this is a router base page!'); 
}); 

router.get('/index1.html', function (req, res) { 
    res.sendFile(__dirname + '/index1.html'); 
}); 

router.post('/index1.html', function (req, res) { 
    res.cookie('name', req.body, { domain: 'localhost:1338', path: '/base' }); 
    res.send(req.body); 
}); 

module.exports = router; 

後app.js

var express = require('express'); 
var app = express(); 
var cookieRouter = require('./cookieRouter.js'); 
app.get('/', function (req, res) { 
    res.send('this is home page!'); 
}); 
app.use('/base', cookieRouter); 
app.listen(1338); 

運行app.js,請求頭顯然具有set-cookie值。但無法將其加入請求標頭,並且即使在刷新網絡之後,req.cookies也是空對象{}。

enter image description here

但如果我只是用簡單的演示,它可以工作,例如:

router.get('/', function (req, res) { 
    res.cookie('name', 'test'); 
}); 

一兩件事,我覺得跟快遞麻煩的是,只有一個res.send()res.redirect() .. 。可以作爲默認發送它會自動添加頭,否則,它會出現錯誤:發送後無法設置標頭。 有人說加return可以解決這個問題,但是我失敗了,所以想怎麼添加,誰能給個完整的演示?

+0

對於'發送後無法設置標題'問題,它與cookie無關,應該是一個新問題。 – shaochuancs

回答

2

Cookie丟失,因爲domain屬性不正確 - 'localhost:1338'需要更改爲'localhost'。端口信息不應包含在domain中。

是的,根據瀏覽器開發工具的網絡面板,有一個Set-Cookie響應標題(如屏幕截圖所示)。但是,如果您在Chrome(或其他瀏覽器中的相應面板)中檢查了Application - Cookies面板,則會發現:由Set-Cookie標頭指定的Cookie不存在。瀏覽器不存儲它,並且不會在以下HTTP請求中發送它。

另請注意,由於Cookie的路徑爲/base,因此只有以/base開頭的HTTP請求才能發送Cookie。

+0

哇,它就像你說的那樣工作,當我以這種方式設置時:'res.cookie('name',req.body,{domain:'localhost',path:'/ base'});'這個麻煩我一個這只是一個低級別的問題。非常感謝。 –