我有一个express/mongodB后端和一个sveltekit前端。在前端,我希望用户能够删除后端中属于他的一些项目。为此,我在用户登录后向客户端发送 cookie。但是,我使用服务器操作来删除该项目,并且根据我的研究,服务器无法访问 cookie。因此,我将其附加在操作内的标题中,如下所示
export const actions =
{
deleteItem: async({fetch,cookies}) => {
let headers = new Headers();
headers.append('Content-Type','application/json');
const cookie = cookies.get('jwt');
headers.append('authorization', cookie);
const response = await fetch('path-to-backend',{
method: 'DELETE',
headers,
credentials: "include"
})
}
}
在上面的代码中,我测试了cookie值为
console.log(cookie);
并且它提供了一个值(正确的值)。在后端,我有一个身份验证中间件来检查 jwt 令牌。在其中我检查标题为
console.log(req.headers);
我得到一个具有“授权”键的对象,并将令牌作为值。但是,当我尝试访问授权值
req.headers['authorization']
时,我得到了未定义的信息。
为什么?
请参阅下面的最小可重现示例,显示您的代码没有问题来完成工作。
服务器.js
const express = require('express');
const app = express();
app.use(express.static('./'));
app.delete('/a', (req, res) => {
res.send(`Authorization : ${req.headers['authorization']}`);
});
app.listen(3000, () => console.log('L@3000'));
index.htm
<!DOCTYPE html>
<html>
<head>
Authorization header check
</head>
<body>
<p></p>
</body>
<script>
const headers = new Headers();
const para = document.querySelector('p');
headers.append('authorization', 'some jwt content');
fetch('a', {
method: 'DELETE',
headers,
})
.then((response) => {
if (!response.ok) {
para.textContent = 'Error :' + response.status;
}
return response.text();
})
.then((data) => {
para.textContent = data;
});
</script>
</html>
测试结果