所以,我想将所有 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/