return res.redirect () не работает в NodeJS - PullRequest
0 голосов
/ 10 января 2020

Я создаю базу данных, используя 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()
    })
})

}) `

1 Ответ

0 голосов
/ 10 января 2020

Я предполагаю, что вы отправляете на сервер через AJAX? В этом случае бессмысленно выполнять перенаправления на сервере, вам нужно разрешить запрос завершиться sh и, в случае успеха, инициировать перенаправление на стороне клиента.

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';
    });
})
...