javascript - express使用fetch请求无法设置cookie

查看:77
本文介绍了javascript - 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>

解决方案

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

credentials选项列表

这篇关于javascript - express使用fetch请求无法设置cookie的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆