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