mysql - 如何修复 node.js 代码以检查登录

标签 mysql sql node.js

我是 node js 的新手,不知道为什么总是返回错误值。我在 html 中制作了发送发布请求的表单,然后 app.js 调用 login.js 函数并检查数据库

我尝试使用 2 var 手动输入并且它有效,但在使用表单时它不起作用。

app.post('/login', urlencodedParser, function (req, res) {
  var check = require('./js/login.js');
  var username = req.body.username;
  var password = req.body.password;
     if(check([username,password]) == true){
        console.log('fine');
        res.render('index');
     }
     else{
        console.log('get lost');
        res.render('login');
     }
});

这是调用 login.js 的 app.js 代码,但即使返回值不正确,页面也不会呈现。

var check = function(arr){
  var con = require(__dirname + '/database.js');
  var login_check = false;
  con.connect(function(err) {
    if (err) throw err;
    con.query("SELECT * FROM users WHERE (name = ?) AND (password = ?)", [arr[0], arr[1]], function (err, result, fields) {
      if (err) throw err;
      if(result)
      {
        login_check = true;
      }
    });
  });
  return login_check;
};

module.exports = check;

最佳答案

因为你的con.query函数是异步的,所以函数的返回默认总是false(在执行check之前返回)。另一种方法,你可以尝试使用回调函数作为我下面的建议代码:

app.post("/login", urlencodedParser, function(req, res) {
  var check = require("./js/login.js");
  var username = req.body.username;
  var password = req.body.password;
  var checkCallback = function (isLogin) {
      if (isLogin) {
        console.log("fine");
        res.render("index");
      } else {
        console.log("get lost");
        res.render("login");
      }
  }
  check([username, password], checkCallback);
});

// -----------------------------
// login.js
var check = function(arr, callback) {
  var con = require(__dirname + "/database.js");
  var login_check = false;
  con.connect(function(err) {
    if (err) throw err;
    con.query(
      "SELECT * FROM users WHERE (name = ?) AND (password = ?)",
      [arr[0], arr[1]],
      function(err, result, fields) {
        if (err) throw err;
        if (result) {
          login_check = true;
          callback(true); // Call the callback function here after checking is done
        }
      }
    );
  });
  return login_check;
};

module.exports = check;

关于mysql - 如何修复 node.js 代码以检查登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57020126/

相关文章:

php - 在 codeigniter 中使用 get_where 和 int 类型列 mysql 获取月份和年份

mysql - 如何检索过去 7 天的数据总和作为单独的总和

php - 哪个数据库应该用于统计跟踪和归档通过 PHP 发送的电子邮件

php - 当用户填写字段时减少相同输入的数量

java - 消除查询中的 SQL 注入(inject)漏洞

node.js - 将对象传递给 Node Express 中的 Nunjucks 模板

javascript - 未将数组从 Node.js 获取到 AJAX

mysql - 在 linux 中连接到 phpmyadmin 时出现问题

SQL隐式连接到显式连接

javascript - 插入数组?