express使用fetch请求无法设置cookie

想问一下为什么我使用fetch提交表单数据,express无法设置cookie,而直接使用form标签时却可以设置。

为了方便,我把模拟的代码全贴上来

var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var app = express();

app.use(require('cookie-parser')());

app.get('/aa', function (req, res) {
    console.log(req.cookies);
    res.cookie('aa', 'aa');
    res.send('a');
});
app.post('/bb', function (req, res) {
    console.log(req.cookies);
    res.cookie('bb', 'bb');
    res.send('bb');        
})
app.get('*', function (req, res){
    console.log('get *');
    console.log('cookie: ', req.cookies);
    res.sendFile(path.resolve(__dirname, 'a.html'));
});
app.listen('3002', function () {
    console.log('start working');
});
<body>
<form method="POST" action="/bb">
    <label>login</label>
    <input type="submit" value="login" />
</form>
<div id='test'>fetch</div>
<script>
    var test = document.getElementById('test');
    test.onclick = function () {
        fetch('/bb', {
            method: 'POST'
        }).then( (data) => {
            data.text().then(function(data) {console.log(data)});
        })
    }
</script>
</body>
阅读 4.6k
2 个回答

与XMLHttpRequest一样,从服务器返回的Set-Cookie响应头是Forbidden header name,因此无法使用response.headers.get()进行读取。 浏览器负责处理设置新的Cookie,cookie可以通过document.cookie读取。但fetch的默认行为是完全忽略Set-Cookie头。想从服务器接受Cookie,您必须使用credentials选项。

credentials选项列表

从stack overflow得到了答案了

fetch('/b', { method : 'post', credentials : 'include' })

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题