Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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
Node.js Can';t在发送到NodeJS Express后设置标题_Node.js_Express_Backend - Fatal编程技术网

Node.js Can';t在发送到NodeJS Express后设置标题

Node.js Can';t在发送到NodeJS Express后设置标题,node.js,express,backend,Node.js,Express,Backend,我是NodeJS的新手,当我尝试使用电子邮件和密码登录时,会出现以下错误: (部分) 错误:发送邮件后无法设置邮件头。 在validateHeader(_http_outgoing.js:491:11) 在ServerResponse.setHeader(_http_outgoing.js:498:3) 在ServerResponse.header(C:\Users\asus\Desktop\server\node\u modules\express\lib\response.js:771:10

我是NodeJS的新手,当我尝试使用电子邮件和密码登录时,会出现以下错误: (部分)

错误:发送邮件后无法设置邮件头。 在validateHeader(_http_outgoing.js:491:11) 在ServerResponse.setHeader(_http_outgoing.js:498:3) 在ServerResponse.header(C:\Users\asus\Desktop\server\node\u modules\express\lib\response.js:771:10) 位于ServerResponse.location(C:\Users\asus\Desktop\server\node\u modules\express\lib\response.js:888:15) 在ServerResponse.redirect(C:\Users\asus\Desktop\server\node\u modules\express\lib\response.js:926:18) 在app.post(C:\Users\asus\Desktop\server\app.js:114:9) 在Layer.handle[作为handle\u请求](C:\Users\asus\Desktop\server\node\u modules\express\lib\router\Layer.js:95:5) 下一步(C:\Users\asus\Desktop\server\node\u modules\express\lib\router\route.js:137:13)
在重定向主页(C:\Users\asus\Desktop\server\app.js:42:9) 在Layer.handle[作为handle\u请求](C:\Users\asus\Desktop\server\node\u modules\express\lib\router\Layer.js:95:5) 错误:发送邮件后无法设置邮件头。 在validateHeader(_http_outgoing.js:491:11) 在ServerResponse.setHeader(_http_outgoing.js:498:3) 在ServerResponse.header(C:\Users\asus\Desktop\server\node\u modules\express\lib\response.js:771:10) 位于ServerResponse.location(C:\Users\asus\Desktop\server\node\u modules\express\lib\response.js:888:15)

const express=require('express'))
const session=require('express-session')
const bodyParser=require('body-parser')
常量用户=[
{id:1,姓名:'Alex',电子邮件:'alex@gmail.com,密码:“123”},
{id:2,名称:'Max',电子邮件:'max@gmail.com,密码:“123”},
{id:3,姓名:'Tiffany',电子邮件:'tiffany@gmail.com,密码:“123”}
]
const app=express()
app.use(bodyParser.urlencoded({
扩展:正确
}))
应用程序使用(会话)({
名称:“sid”,
resave:false,
saveUninitialized:false,
秘密:“nikivekartal”,
曲奇:{
最大值:1000*60*60*2,
sameSite:没错,
}
}))
const redirectLogin=(请求、恢复、下一步)=>{
如果(!req.session.userId){
res.redirect(“/login”)
}
否则{
下一个()
}
}
const redirectHome=(请求、恢复、下一步)=>{
if(请求会话用户ID){
res.redirect(“/home”)
}
否则{
下一个()
}
}
应用程序获取(“/”,(请求,请求)=>{
const{userId}=req.session;
console.log(“Session”,req.Session.userId)
res.send(`
欢迎
${userId?`
注销
` : `
`}`)
})
app.get('/home',重定向登录,(req,res)=>{
res.send(`
家
  • 苹果
  • 樱桃
`) }) //redirectHome mddleware ini eğer用户验证olmuşsa登录'e gitmesin' //吉辛之家,迪耶·科尤约鲁兹 app.get('/login',redirectHome,(req,res)=>{ res.send(` 登录 `) }) app.get('/register',redirectHome,(req,res)=>{ res.send(` 登记 `) }) app.post('/login',重定向主页,(请求,回复)=>{ const{email,password}=req.body 如果(电子邮件和密码){ const user=users.find( user=>user.email===email&&user.password===password ) 如果(用户){ req.session.userId=user.id res.redirect(“/home”) } } res.redirect(“/login”) }) app.post('/register',重定向主页,(请求,回复)=>{ }) app.post('/logout',重定向登录,(req,res)=>{ }) app.listen(process.env.PORT | | 3000,()=>{ log(“服务器正在运行”); })

我该怎么做?为什么?谢谢您的考虑。

您的
/login
路由可以调用
res.redirect()
两次。在其中一个之后添加一个返回值以更改此设置:

app.post('/login', redirectHome, (req, res) => {
    const {email, password} = req.body

    if(email && password){
        const user = users.find(
            user => user.email === email && user.password === password
        )

        if(user){
            req.session.userId = user.id
            res.redirect('/home')
        }
    }

    res.redirect('/login')
});
为此:

app.post('/login', redirectHome, (req, res) => {
    const {email, password} = req.body

    if(email && password){
        const user = users.find(
            user => user.email === email && user.password === password
        )

        if(user){
            req.session.userId = user.id
            res.redirect('/home')
            return;                   // <== add this return
        }
    }

    res.redirect('/login')
});
app.post('/login',redirectHome,(req,res)=>{
const{email,password}=req.body
如果(电子邮件和密码){
const user=users.find(
user=>user.email===email&&user.password===password
)
如果(用户){
req.session.userId=user.id
res.redirect(“/home”)

return;//顺便说一句,代码还没有完成。我在尝试执行res.render()时出现了这个错误,而我已经执行了一个。我的意思是,对于路由上的一个用户请求,我将执行两个响应。两个不同的res.render(),一个在开始时,一个在劳动密集型工作完成后。HTTP协议是每1个请求1个响应。
app.post('/login', redirectHome, (req, res) => {
    const {email, password} = req.body

    if(email && password){
        const user = users.find(
            user => user.email === email && user.password === password
        )

        if(user){
            req.session.userId = user.id
            res.redirect('/home')
            return;                   // <== add this return
        }
    }

    res.redirect('/login')
});