从MySQL数据库进行身份验证后,如何在app.post中重定向用户?

时间:2019-04-15 13:38:19

标签: node.js express

我正在创建一个网站,它带有一个简单的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”。

2 个答案:

答案 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);
})