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

Node.js return res.redirect()在NodeJS中不工作,node.js,middleware,Node.js,Middleware,我正在使用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=bo

我正在使用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时,它都不起作用

这就是我试图改变方向的地方

` $=>{

}
`

我想您是通过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';
    });
})

在网络选项卡上,它显示304为状态-这就是res.redirect应该做的,你能澄清一下不工作吗?这意味着在/signup处插入值或在/login处检查验证用户后,在成功注册或用户验证后,它不会将用户重定向到path/chatapp。你是如何发出这些请求的?如果它是由JavaScript生成的,例如不是表单元素submit,则浏览器不会自动更改页面。您显示的代码运行良好。我正在使用JQuery发出请求,请详细说明浏览器无法刷新页面的原因。您可以演示一下您是什么吗saying@PrakashPandey参见示例是的,代码工作正常,但我想在成功注册或登录后发送一个请求,该请求可以引导用户访问/chatApp,从服务器端,即从server.js或从script.js。经过几次研究,我发现我们不能从AJAX调用重定向,AJAX只能用于发送和获取少量数据,而无需重新加载页面。此外,我还发现,无论何时我们想要从AJAX调用重定向,唯一的方法就是使用HTML表单。如果我对AJAX有误解或到目前为止有误解,请纠正我call@PrakashPandey你仍然可以发送一个对服务器的请求,并让它重定向到客户端,它不能是一个AJAX请求。因此,例如,如果希望服务器在成功创建用户后重定向客户端,则可以使用表单POST。
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';
    });
})