javascript - 如何在不同的 NodeJS 文件中正确返回 bool 值?

标签 javascript mysql node.js

所以我在以下文件夹中有文件:

  • app/controller/token.js
  • app/controller/news.js

token.js:

"use strict";

var connection = require("../con");

exports.isTokenExists = function(token) {

  var checkToken = "SELECT COUNT(`id`) AS 'total' FROM `user` WHERE `token` = '" + token + "'";
  var isExists = false;
  var count;
  var checkResult;

  connection.query(checkToken, function(error, rows) {
    if (!error) {
      checkResult = JSON.parse(JSON.stringify(rows));
      for (var i = 0; i < checkResult.length; i++) {
        var row = rows[i];
        count = row.total;
      }
      if (count > 0) {
        isExists = true;
      }
    }
  });

  return isExists;

};

新闻.js:

"use strict";

var response = require("../response/responses");
var connection = require("../con");
var getToken = require("./token");

exports.news = function(req, res) {
  response.send(false, "News API", null, res);
};

exports.allNews = function(req, res) {
  var checkTokenExists = getToken.isTokenExists("75d12cc4dc07608d5b87a6cba33cac056df1239c");
  if (checkTokenExists) {
    var allNewsQuery = "SELECT a.`id`, b.`title` AS `category`, a.`title`, a.`description`, a.`content`, a.`image`, a.`created_date` FROM `news` AS a LEFT JOIN `news_category` AS b ON a.`id_news_category` = b.`id` ORDER BY `created_date` DESC LIMIT 20";
    connection.query(allNewsQuery, function(error, rows) {
      if (error) {
        response.send(true, "" + error, null, res);
      } else {
        var data = [];
        var newsData = JSON.parse(JSON.stringify(rows));

        for (var i = 0; i < newsData.length; i++) {

          var row = rows[i];

          data[i] = {
            id: row.id,
            idCategory: row.idCategory,
            category: row.category,
            title: row.title,
            description: row.description,
            image: row.image,
            createdDate: row.created_date
          };

        }
        response.send(false, "News is not empty", data, res);
      }
    });
  } else {
    response.send(true, "Error: Token not found", checkTokenExists, res);
  }
};

当 token 存在于表中时,我总是从 isTokenExists 获取 false 值。

Query same as var checkToken

如果 token 存在,如何获得 true 响应?如果表中不存在 token ,如何获得 false 响应?

任何帮助将不胜感激。

问候。

最佳答案

这里的问题是 connection.query 接受回调,但是代码的其余部分将通过该回调而不等待结果,这就是为什么您的 isExists 总是返回假。您可以通过使用 Promise 封装查询来解决此问题,如下所示:

"use strict";

const connection = require("../con");

exports.isTokenExists = async function(token) {
    const checkToken = "SELECT COUNT(`id`) AS 'total' FROM `user` WHERE `token` = ?";
    return new Promise((resolve, reject) => {
        connection.query(checkToken, token, function (error, results) {
            if (error) return reject(error);
            return resolve(results.length > 0);
        });
    });
};

我还稍微简化了回调中的逻辑。

然后,在 news.js 中等待结果,如下所示:

exports.allNews = async function(req, res) {
    getToken.isTokenExists("75d12cc4dc07608d5b87a6cba33cac056df1239c")
        .then(result => {
            if (result === true) {
                //place your code for handling if the token exists here
            }
            else {
                //place your code for handling if the token does not exist
            }
        })
        .catch(err => {
            //handle error
        });
}

关于javascript - 如何在不同的 NodeJS 文件中正确返回 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59378778/

相关文章:

javascript - 为什么滚动后导航栏变得粘滞时,部分 div 的标题向左移动?

javascript - 如何防止大文本字段数字转换为 1e 表示法 -Javascript/EXTJS

php - Paypal付款后插入数据库的逻辑(PHP.MySQL)

MySQL 从出生日期算起的年龄 - TIMESTAMPDIFF()

node.js - 由于大量请求,pm2 挂起并且无法重新启动进程

node.js - Xcode Build react native 代码和图像未找到 Node

javascript - 此绑定(bind)在 forEach 箭头函数中未按预期工作

MySQL 表导出为 HTML

javascript - 获取超过 100 条消息

javascript - 从 cookie 设置 EXTjs 按钮/项目文本