Ska*_*kay 24 javascript fetch node.js
我有nodejs应用程序处理用户的请求并接收我想代理到内部API服务的cookie.如何通过使用node-fetch来解决这个问题?
请不要提供superagent.
ple*_*and 32
您应该能够通过在请求的标头中设置cookie来传递cookie:
const opts = {
headers: {
cookie: 'accessToken=1234abc; userId=1234'
}
};
const result = await fetch(`/some/url`, opts);
Run Code Online (Sandbox Code Playgroud)
async function login() {
return fetch('<some_url>/login', {
'headers': {
'accept': '*/*',
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
'cookie': '',,
},
'body': 'username=foo&password=bar',
'method': 'POST',
});
}
(async() => {
const loginResponse = await login();
const loginCookies = parseCookies(loginResponse);
})();
Run Code Online (Sandbox Code Playgroud)
您可能要包括:accept-language,user-agent,referer,accept-encoding,等(请检查您的Chrome DevTools的示例请求)
出于某种原因,节点获取请求的结果cookie与新请求不兼容,但是我们可以这样解析它们:
function parseCookies(response) {
const raw = response.headers.raw()['set-cookie'];
return raw.map((entry) => {
const parts = entry.split(';');
const cookiePart = parts[0];
return cookiePart;
}).join(';');
}
Run Code Online (Sandbox Code Playgroud)
通过相同的标头在将来的请求中传递cookie:
return fetch('<some_url>/dashboard', {
'headers': {
'accept': '*/*',
'cookie': parsedCookies,
},
'method': 'GET',
});
Run Code Online (Sandbox Code Playgroud)