javascript - 为什么我的模块函数在 Node.js 中返回未定义?

标签 javascript node.js json function module

所以,我想将所有 mysql 查询函数移动到另一个文件并将其作为模块导入,但我遇到了问题,因为该函数返回未定义。

index.js:

const express = require('express')
const https = require('https');
const fs = require('fs');
const dbx = require('./databaseconn');

var options = {
    key: fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem'),
    cert: fs.readFileSync('/etc/letsencrypt/live/example.com/cert.pem'),
    ca: fs.readFileSync('/etc/letsencrypt/live/example.com/chain.pem')
};

const app = express();

app.use(express.json());

app.use(function(req,res,next) {
    if (req.body.action) {
        switch (req.body.action) {
            case "login":
                var user = req.body.username;
                var pass = req.body.password;
                console.log(dbx.checklogin(user, pass));  // This prints undefined
                break;
            default:
                break;
        }
    }
});

https.createServer(options,app).listen(8000);

databaseconn.js:

const mysql = require('mysql');

exports.checklogin = function(username, password) {
    var connection = mysql.createConnection({
        host     : 'localhost',
        user     : 'root',
        password : 'xxxxxxxxxxxxxx',
        database : 'users',
    });

    connection.query('select * from logins where username = ? and password = ?;',
    [
        username,
        password
    ], function (err, rows, fields) {
        if (err) throw err;
        if (!rows.length) {
            console.log('0');
            return {"success":0};
        } else {
            console.log('1');      // THIS PRINTS
            return {"success":1};  // So this should return the JSON
        }
    })
}

因此,我在databaseconn.js 中的console.log 中看到“1”,但index.js 文件中的console.log 正在打印未定义。我究竟做错了什么?我还做了一个 super 准系统测试,效果很好,所以我看不出差异。

测试.js:

const express = require('express');
const test2 = require('./test2');
var t = test2.test();
console.log(t);

test2.js:

exports.test = function() {
    return {"success":1};
}

最佳答案

console.log里面的声明index.js模块打印 undefined因为checklogin里面的功能databaseconn.js模块不返回任何内容( {"success":1}checklogin 内部匿名函数的返回值,但它不是 checklogin 本身的返回值)。

是否要处理 index.js 内的查询结果模块,您可以从 index.js 传递回调至databaseconn.js模块,它可能如下所示:

index.js:

app.use(function(req, res, next) {
  if (req.body.action) {
    switch (req.body.action) {
      case "login":
        var user = req.body.username;
        var pass = req.body.password;
        dbx.checklogin(user, pass, function(err, rows, fields) {
          console.log('Here you can handle the query result')
        });
        break;
      default:
        break;
    }
  }
});

databaseconn.js:

exports.checklogin = function(username, password, callback) {
  var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : 'xxxxxxxxxxxxxx',
    database : 'users',
  });

  connection.query('select * from logins where username = ? and password = ?;',
    [
      username,
      password
    ], callback)
}

关于javascript - 为什么我的模块函数在 Node.js 中返回未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55767936/

相关文章:

javascript - 浏览器后退按钮不适用于 anchor 链接

node.js - Sequelize 中未添加/更新多对多联结表中的额外列

node.js - 如何在 cpanel 共享主机中安装 nodejs(基于 linux)

python - 使用 python 在大型 JSON 数据集中查找值和重复项

json - MVC3 Ajax.ActionLink 导致文件打开对话框

javascript - 如何为一组对象制作动画?

javascript - 给定乘积,找到最简单的底数及其指数

javascript - 如何使用谷歌通讯录服务读取日期(出生)

javascript - 使用 Node-schedule 安排作业

php - 来自 PHP MySQL 结果的 jSon 对象