Javascript 在Nodejs中设置cookie

Javascript 在Nodejs中设置cookie,javascript,node.js,express,Javascript,Node.js,Express,我正在进行一个小的请愿项目,我想在用户签名时设置一个cookie,因此如果他再次尝试访问该页面,它应该将他重定向到“感谢页面”。如果用户没有,那么他可以继续签名。 我收到发送到客户端后无法设置标题的错误,可能有人知道我做错了什么。下面是js代码 const express=require(“express”); const{getSignatures,addSignature}=require(“./db.js”); 常量app=express(); const cookieParser=re

我正在进行一个小的请愿项目,我想在用户签名时设置一个cookie,因此如果他再次尝试访问该页面,它应该将他重定向到“感谢页面”。如果用户没有,那么他可以继续签名。 我收到
发送到客户端后无法设置标题的错误,可能有人知道我做错了什么。下面是js代码

const express=require(“express”);
const{getSignatures,addSignature}=require(“./db.js”);
常量app=express();
const cookieParser=require(“cookie解析器”);
use(express.urlencoded({extended:false}));
应用程序使用(快速静态(“/公共”);
const hb=需要(“快速把手”);
发动机附件(“把手”,hb());
应用程序集(“查看引擎”、“把手”);
使用(cookieParser());
应用程序获取(“/”,(请求,请求)=>{
res.redirect(“/请愿书”);
});
app.get(“/请愿书)”,(请求,请求)=>{
让hasSigned=req.cookies.application\u签名;
如果(!hasSigned){
res.render(“请愿书”{
布局:“主”,
});
}否则{
res.redirect(“/谢谢”);
}
});
申请公告(“/请愿书)”,(请求、回复)=>{
const{firstName,lastName,signature}=req.body;
//控制台日志(“请求主体:”,请求主体);
如果(firstName==“”| | lastName==“”| | signature==“”){
res.render(“请求错误”{
错误:“请在提交前填写所有元素”,
});
}否则{
addSignature(名字、姓氏、签名)。然后((数据)=>{
cookie案(“已签署的请愿书”、“是”);
控制台日志(数据);
});
res.redirect(“/谢谢”);
}
});
app.get(“/谢谢”,(请求、回复)=>{
res.render(“谢谢”{
布局:“主”,
});
});
app.get(“/signers)”,(请求、回复)=>{
getSignatures()。然后((数据)=>{
res.render(“签名者”,{success:true,rows:data.rows});
});
});

app.listen(8080,()=>console.log(“8080上的监听”)
按照您构建它的方式,它尝试在
res.redirect
之后执行
res.cookie
,因为addSignature是一个异步函数

    addSignature(firstName, lastName, signature).then((data) => {
        res.cookie("petition_signed", "yes");
        console.log(data);
        res.redirect("/thanks");
    });

您需要确保
res.cookie
redirect
(将头返回到客户端)之前被调用
res.cookie

按照您的结构方式,它试图在
res.redirect
之后执行
res.cookie
,因为addSignature是一个异步函数

    addSignature(firstName, lastName, signature).then((data) => {
        res.cookie("petition_signed", "yes");
        console.log(data);
        res.redirect("/thanks");
    });

您需要确保在
重定向之前调用
res.cookie
(将头返回到客户端)

我将res.cookie和res.redirect移到addSignature函数之外,并且它正在工作。还是有点不懂承诺:)我把res.cookie和res.redirect移到addSignature函数之外,它开始工作了。还是一个有承诺的新手:)