Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js脚本中创建cookie_Javascript_Node.js_Express_Cookies - Fatal编程技术网

Javascript 在node.js脚本中创建cookie

Javascript 在node.js脚本中创建cookie,javascript,node.js,express,cookies,Javascript,Node.js,Express,Cookies,我正在尝试node.js脚本。我尝试过使用express/cookie解析器&没有。。。 ATM我在本地模式下工作,但我将在werbserver上使用它 在我所有的尝试中,我得到了任何错误,但饼干没有 我最后一次尝试(没有express/cookie解析器): consthttp=require('http'); 常数fs=要求('fs'); 常数端口=53134; const url=require('url'); const fetch=require('node-fetch'); let

我正在尝试node.js脚本。我尝试过使用express/cookie解析器&没有。。。 ATM我在本地模式下工作,但我将在werbserver上使用它

在我所有的尝试中,我得到了任何错误,但饼干没有

我最后一次尝试(没有express/cookie解析器):

consthttp=require('http');
常数fs=要求('fs');
常数端口=53134;
const url=require('url');
const fetch=require('node-fetch');
let express=要求('express');
设app=express();
让cookieParser=require('cookie-parser');
使用(cookieParser());
http.createServer((req,res)=>{
让responseCode=404;
让内容='404错误';
const urlObj=url.parse(req.url,true);
让伊塞克莱尔=假;
if(urlObj.query.code){
const accessCode=urlObj.query.code;
log(`访问代码为:${accessCode}`);
常数数据={
客户id:'805884181811822624',
客户机密:“JRSPE0nmRn881Mi9cLC gMozHKWLQVPT”,
授权类型:“授权码”,
重定向_uri:'http://localhost:53134',
代码:accessCode,
范围:“识别行会”,
};
取('https://discord.com/api/oauth2/token', {
方法:“POST”,
正文:新的URLSearchParams(数据),
标题:{
“内容类型”:“应用程序/x-www-form-urlencoded”,
},
})
.then(discordRes=>discordRes.json())
。然后(信息=>{
控制台日志(信息);
退货信息;
})
.then(info=>fetch()https://discord.com/api/users/@我",{
标题:{
授权:`${info.token\u type}${info.access\u token}`,
},
}))
.then(userRes=>userRes.json()。然后(userData=>{
console.log(userData);
取回(`https://discord.com/api/guilds/799385448824438824/members/${userData.id}`{
标题:{
授权:`Bot ODA1ODg0MTgxODExODIyNjI0.YBhYIQ.h4zLzR7ybBC1uvFSb4iZTH JVhM`,
},
})
.then(guildRes=>guildRes.json()。then(guildata=>{
console.log(guildata)

对于(让i=0;i编写服务器请求处理程序的方式,它总是调用以下命令:

    res.writeHead(responseCode, {
        'content-type': 'text/html;charset=utf-8',
    });

    res.write(content);
    res.end();
然后,在
fetch()
调用完成后的某个时间,它可能会尝试设置您的cookie。到那时,响应已经发送,已经太晚了。因此,您的cookie永远不会发送。要解决此问题,您必须重新构造代码,以便在您进入调用
fetch()的分支时
,则根本不执行上述代码,以便
fetch()
响应处理程序可以发送它想要的响应


此外,在尝试设置cookie的代码中,您可以执行以下操作:

res.writeHead(200, { 'Set-Cookie': 'cookie', 'Content-Type': 'text/plain' });
res.writeHead(301, { Location: `http://localhost:53134/?code=${accessCode}` });
res.end();

这毫无意义。您可以
res.writeHead()
一次且仅一次(您可以在一次调用中设置多个标头)。并且,您可以为请求获取一个且仅一个状态代码,而不是两个。选择一个或另一个。

为什么要
res.writeHead(200,…)
然后立即执行
res.writeHead(301,…)
?选择一个或另一个-不能同时执行这两个操作。您可以在对
res.writeHead()
的一次调用中设置多个头,但只能有一个状态值和一个对此方法的调用。此外,您在
for
循环中调用
res.writeHead()
,该循环可能会多次调用它。
res.writeHead(200, { 'Set-Cookie': 'cookie', 'Content-Type': 'text/plain' });
res.writeHead(301, { Location: `http://localhost:53134/?code=${accessCode}` });
res.end();