我正在创建一个网站,它带有一个简单的UI,带有带有NodeJ和MySQL数据库的用户登录/注册系统。我的身份验证部分正在工作,但是在验证详细信息之后遇到了重定向用户的麻烦。该表单正在使用POST方法,并且在NodeJs文件中正在“ app.post”中对用户进行身份验证。
我尝试使用“ res.send”,“ res.redirect”,“ res.sendfie”重定向用户 都失败了正在收到错误:“错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头”。
登录表格
<FORM autocomplete="on" action="http://localhost:8888/user" method="POST">
<INPUT type="text" name="username" placeholder="Name">
<INPUT type="password" name="pass" placeholder="Password">
<BUTTON class="button">Login</BUTTON>
</FORM>
NodeJs文件
var express = require('express');
var bodyParser= require('body-parser');
var app = express();
var mysql=require('mysql');
var con=mysql.createConnection({
host: "localhost",
user:"root",
password:"",
database: "mydb"
});
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
con.connect(function(err){
if(err) throw err;
console.log("connected");
});
function redirect(){
res.send(__dirname + '/index.html');
}
app.get('/login.html',function(req,res){res.sendFile(__dirname+ "/" + "login.html");});
app.post('/user',function(req,res){
var uname=req.body.username;
var pass=req.body.pass;
var sql="Select * from user where username = '"+uname+"' and pass='"+pass+"'";
con.query(sql,function(err,result,fields){
console.log(sql);
console.log(result);
if(err)
throw err;
else{
if(result.length==1){
console.log("you have successfully logged in");
res.redirect("/dashboard.html");
}
else
console.log("Sorry ! login failed");
}
});
res.end();
});
con.end();
var server= app.listen(8888,function(){
var host=server.address().address;
var port=server.address().port;
console.log("Example app listening at http://%s%s",host,port);
});
我希望在对数据进行身份验证之后,如果详细信息正确,则应将用户重定向到“ dashboard.html”,否则应重定向到“ error.html”。
答案 0 :(得分:0)
添加中间件
app.use(express.static(__dirname + "/public/dashboard.html"));
在“ /用户”中
if(result.length==1){
console.log("you have successfully logged in");
res.redirect("/dashboard");
}
else
console.log("Sorry ! login failed");
}
答案 1 :(得分:0)
您的快递routes
有几个问题。建议不要在路由中使用login.html
这样的文件类型扩展名,而只需使用login
。
您尚未为dashboard.html
定义res.redirect("/dashboard.html")
路线
app.get('/dashboard', (req, res) => {
res.sendFile()__dirname + "/dashboard.html"
})
app.post('/user',function(req,res,next){
var uname = req.body.username;
var pass = req.body.pass;
var sql = "Select * from user where username = '"+uname+"' and pass='"+pass+"'";
con.query(sql,function(err,result,fields){
console.log(sql);
console.log(result);
if(err)
// pass error to error handler middleware
// it's preferrable to handle error in express with the catch all error middleware
next(err);
else {
if(result.length === 1){
console.log("you have successfully logged in");
res.redirect("/dashboard");
} else {
console.log("Sorry ! login failed");
}
}
});
});
con.end();
// catch all error
app.use((err, req, res, next) => {
console.error(err);
})