return res.redirect() 在 NodeJS 中不工作

return res.redirect() not working in NodeJS

我正在使用 sequelize 作为 ORM 和 Sqlite3 作为 NodeJS 中的数据库来创建数据库,但是每当我在注册或成功登录期间重定向客户端时,它应该不工作,并且在网络选项卡上显示 304 作为状态。

const express=require('express')
const {db,user}=require('./db.js')

const app=express()
const bodyPraser=require('body-parser')
var urlencodedParser=bodyPraser.urlencoded({extended:true})

app.post('/signup',urlencodedParser,async (req,res)=>{
    await user.create({
        username:req.body.username,
        email: req.body.email,
        password:req.body.password
    })
    return res.redirect("/chatApp");
})

app.post('/login',urlencodedParser,async (req,res)=>{
       let emailorUsername=req.body.emailorUsername;
       let password=req.body.password;

       let data=await user.findAll()
       for(let i of data){
           if((i.username==emailorUsername || i.email==emailorUsername )&& i.password==password)
           {   console.log('found')
               return res.redirect("/chatApp")
           }
       }
       return res.redirect("/main")
})


app.use('/main',express.static(__dirname+'/public'))
app.use('/chatApp',express.static(__dirname+'/chatapp'))

db.sync().then(()=>{
      app.listen(4321,()=>{
          console.log('http://localhost:4321')
      })
})

看看,每当我重定向到 /chatApp 它不起作用

这里是我尝试重定向的地方

` $(()=>{

//sending signup request
$("#signup").click(function(){
    $.post('/signup',{
        username:$("#username").val(),
        email:$("#email").val(),
        password:$("#password").val()
    })
})

// sending login request
$("#login").click(()=>{
    console.log("button is pressed");
    $.post('/login',{
        emailorUsername:$("#emailorname").val(),
        password:$("#password1").val()
    })
})

}) `

我猜你是通过 AJAX 发帖到服务器?在这种情况下,在服务器端执行重定向是没有意义的,您需要让请求完成,如果成功,则在客户端发起重定向。

app.post('/signup', urlencodedParser, async (req,res)=>{
  await user.create({
      username:req.body.username,
      email: req.body.email,
      password:req.body.password
  });
  res.set('Location', 'url/of/new/user');
  return res.status(201).json({ /* new user object */ 
});

app.post('/login',urlencodedParser,async (req,res)=>{
   let emailorUsername=req.body.emailorUsername;
   let password=req.body.password;

   let data=await user.findAll()
   for(let i of data){
       if((i.username==emailorUsername || i.email==emailorUsername )&& i.password==password)
       {   console.log('found')
           return res.sendStatus(200);
       }
   }
   return res.sendStatus(401);
})

...

//sending signup request
$("#signup").click(function(){
    $.post('/signup',{
        username:$("#username").val(),
        email:$("#email").val(),
        password:$("#password").val()
    }).done(user => {
      console.log('User created', user);
      window.location = '/chatApp';
    }).fail(e => {
      console.log('Create user failed', e);
    })
})

// sending login request
$("#login").click(()=>{
    console.log("button is pressed");
    $.post('/login',{
        emailorUsername:$("#emailorname").val(),
        password:$("#password1").val()
    })
    .done(() => {
      window.location = '/chatApp';
    })
    .fail(e => {
      console.log('Authentication failed');
      window.location = '/main';
    });
})