[英]Apollo server set multiple `set-cookie` header in response
我將 apollo-server-express 與 apollo-rest-datasources 一起使用。 我正在嘗試從formatResponse
方法返回多個set-cookie
header 以響應 header 給我的客戶
set-cookie: key1=value1
set-cookie: key2=value2
但是每當我傳入數組時,它只會將其字符串化並以逗號分隔這是我的formatResponse
方法
formatResponse: (response, requestContext) => {
Object.entries(requestContext.context.response.headers).forEach(([key, value]) => {
requestContext.response.http.headers.set(key, value);
});
這是我的上下文 object
context: ({ req, res }) => {
return {
response: {
headers: {
'set-cookie': ['key1=value1', 'key2=value2']
},
},
res,
};
},
我得到的最終響應是這種形式set-cookie: key1=value1, key2=value2
並且瀏覽器無法識別有 2 個 cookies 要設置,它只是在 cookies 中設置key1=value1
。
我使用傳遞到阿波羅服務器上下文的 express res
來設置多個 cookies。 例如
import { ApolloServer, gql } from 'apollo-server-express';
import express from 'express';
const typeDefs = gql`
type Query {
dummy: String!
}
`;
const resolvers = {
Query: {
dummy: () => 'hello world',
},
};
const server = new ApolloServer({
typeDefs,
resolvers,
context: ({ req, res }) => {
return {
response: {
headers: {
'set-cookie': ['key1=value1', 'key2=value2'],
},
},
res,
};
},
formatResponse: (response, requestContext: any) => {
// not working
// requestContext.response!.http!.headers.set('set-cookie', 'key1=value1');
// requestContext.response!.http!.headers.set('set-cookie', 'key2=value2');
// works fine
requestContext.context.res.set('set-cookie', ['key1=value1', 'key2=value2']);
return response!;
},
});
const app = express();
server.applyMiddleware({ app });
app.get('/', (req, res) => {
res.sendFile('index.html', { root: __dirname });
});
app.listen({ port: 4000 }, () => console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`));
從瀏覽器獲取響應 header:
HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: *
set-cookie: key1=value1
set-cookie: key2=value2
Content-Type: application/json; charset=utf-8
Content-Length: 33
ETag: W/"21-wOMEaw/ExA+LOH3PCuP0vilR+4w"
Date: Wed, 22 Apr 2020 05:30:20 GMT
Connection: keep-alive
通過document.cookie
獲取 cookies :
document.cookie
"key1=value1; key2=value2"
源代碼: https://github.com/mrdulin/apollo-graphql-tutorial/tree/master/src/stackoverflow/61183199
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.