Node.js return res.redirect()在NodeJS中不工作
我正在使用sequelize作为ORM创建一个数据库,并将Sqlite3作为NodeJS中的数据库,但每当我在注册或成功登录期间重定向客户端时,它都不工作,它应该在网络选项卡上显示304作为状态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
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';
});
})