Как перенаправить пользователя в app.post после аутентификации из базы данных MySQL? - PullRequest
0 голосов
/ 15 апреля 2019

Я создаю веб-сайт с простым пользовательским интерфейсом с системой входа / регистрации пользователя с NodeJs и базой данных MySQL.Моя часть аутентификации работает, но я столкнулся с проблемой перенаправления пользователя после того, как детали были проверены.Форма использует метод POST, и в файле NodeJs я аутентифицирую пользователя в "app.post".

Я попытался перенаправить пользователя, используя "res.send", "res.redirect", "res.сендфи "и все провалились.Получаю сообщение об ошибке: «Ошибка [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 голосов
/ 15 апреля 2019

Есть несколько проблем с вашим экспрессом 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);
})
0 голосов
/ 15 апреля 2019

добавить промежуточное ПО

app.use(express.static(__dirname + "/public/dashboard.html"));

в '/ user'

if(result.length==1){
                console.log("you have successfully logged in");
                res.redirect("/dashboard");
            }
            else
        console.log("Sorry ! login failed");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...