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';
});
})
我正在使用 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';
});
})