Node.js从一个模块传递variables/对象并返回

我正在使用一个node.js框架,最初编写get数据库密码/哈希和比较forms密码/哈希在一个路由文件。 现在我想传递一个userName到一个单独的模块。 该模块应该接受一个userName并从数据库中返回相应的密码/散列。

在将函数分解成自己的模块之前,我们返回哈希值并将其传递给下一个函数( passHash ),代码工作得很好。 现在,我已经从数据库调用分离function,我不知道如何返回哈希回到原来的function。

将函数分解为两个单独的文件,我可以成功地将userName传递给数据库模块(它将控制台loggingusername / hash ),但是我无法将用户的密码/散列返回到原始路由中的原始函数。 我已经阅读了很多关于如何使用require将“OR”返回variables/对象从一个模块传递给另一个的post,但是关于如何传递一个variables“AND”没有任何回应post函数的数据。

以下是创build这些文件时所咨询的一些资源

1.) 接受的答案很容易遵循(这是我使用的模型)

2.) 高级

3.) 例子大多数答案显示单向返回函数

4.) 似乎有答案

此外,我已经尝试在几个安排中返回密码/哈希值; 创build一个对象并返回属性。 返回对象,并将该对象分配给一个variables,并提取类似于链接4上面的属性。

以下是:

1.)模块化数据库function( databaseLoginUser.js

2.)调用Modularized函数的原始path( databaseLogin.js

3.)控制台输出(没有错误只是挂起等待下一个function)

 //databaseLoginUser.js var express = require('express'); var router = express.Router(); var mysql = require('mysql'); module.exports.getModuleFunction = function(userName, callback) { queryUser(userName); function queryUser(userName) { console.log('In Query User; '); var database = mysql.createConnection({ host: "xxx.xxx.xxx.xxx", port: "3306", user: "UserName", password: "Password", database: "Students", multipleStatements: true }); database.connect(); console.log('test'); database.query('SELECT StudentUsername, StudentPassword FROM STUDENT WHERE StudentUsername = ?', userName, function(err, rows, fields) { if (err) { console.log(err); } //console.log(rows); console.log('Database Returned User: ' + rows[0].StudentUsername); console.log('Database Returned Password: ' + rows[0].StudentPassword); var hashFromDatabaseBuffer = Buffer.from(rows[0].StudentPassword); returnPassHash(hashFromDatabaseBuffer); return returnPassHash; }) function returnPassHash(hashFromDatabaseBuffer) { console.log('Do I get here?; '); return hashFromDatabaseBuffer; } } }; 

queryPass是调用并返回其他模块的密码属性的函数,我已经写了几个不同的方法,但是为了简洁起见,发布了这个版本的函数调用。

 //loginUser.js var express = require('express'); var router = express.Router(); var mysql = require('mysql'); var bodyParser = require('body-parser'); var async = require('async'); var app = express(); var expressValidator = require('express-validator'); var securePassword = require('secure-password'); var database = require('./db'); var queryPass = require('./databaseLoginUser'); router.get('/', function(req, res, next) { 'use strict'; console.log('in the login user get route'); res.render('signUp'); }); router.post('/', function(req, res, next) { 'use strict'; console.log('in Login Route'); var userName = req.body.userName; var preHashPass = req.body.password; queryPass.getModuleFunction(userName, function(data) { passHash('', '', data) }); function passHash(userName, preHashPass, hashFromDatabaseBuffer) { // Initialise our password policy var pwd = securePassword() var postPassHash = Buffer.from(preHashPass); // Register user pwd.hash(postPassHash, function(err, hash) { if (err) throw err // Save hash somewhere console.log('Form Password Hashed:'); console.log(hash); pwd.verify(postPassHash, hashFromDatabaseBuffer, function(err, result) { console.log('Verify Result: '); console.log(result); if (err) throw err if (result === securePassword.INVALID) { return res.render('index'); return console.log('Imma call the cops') res.render('index'); } else { if (result === securePassword.INVALID_UNRECOGNIZED_HASH) return console.error('This hash was not made with secure-password. Attempt legacy algorithm') if (result === securePassword.VALID) console.log('Yay you made it') if (result === securePassword.VALID_NEEDS_REHASH) { console.log('Yay you made it, wait for us to improve your safety') pwd.hash(hashFromDatabase, function(err, improvedHash) { if (err) console.error('You are authenticated, but we could not improve your safety this time around') // Save improvedHash somewhere hash = improvedHash; }) } var verifiedHash = hash; console.log('verifiedHash: '); console.log(verifiedHash); //Give User Auth Token Here console.log('You Get an auth Token: '); res.render('studentDash'); } }) // pwd.verify }); pwd.hash }; // pass hash }) module.exports = router; 

从服务器的控制台输出(注意密码是虚拟数据)

控制台输出

 [nodemon] starting node ./bin/www GET /LogoWithLayersTiny.png 304 1.124 ms - - in Login Route In Query User; test Database Returned User: bb Database Returned Password: "HashParametersRemoved"$WItArkxi20QeSHlGhUK2lQ$PY74Axv6cOvFD‌​FiHmZ6EwT0RMgLkDOb1W‌​6CVBssE1tk Do I get here? 

我想你只需要调用databaseLoginUser.js传递数据的callback 。 像这样的东西:

 // databaseLoginUser.js var express = require('express'); var router = express.Router(); var mysql = require('mysql'); module.exports.getModuleFunction = function (userName, callback) { queryUser(userName); function queryUser(userName) { console.log('In Query User; '); var database = mysql.createConnection({ host: "xxx.xxx.xxx.xxx", port: "3306", user: "UserName", password: "Password", database: "Students", multipleStatements: true }); database.connect(); database.query('SELECT StudentUsername, StudentPassword FROM STUDENT WHERE StudentUsername = ?', userName, function (err, rows, fields) { if (err) { console.log(err); } console.log('Database Returned User: ' + rows[0].StudentUsername); console.log('Database Returned Password: ' + rows[0].StudentPassword); var hashFromDatabaseBuffer = Buffer.from(rows[0].StudentPassword); callback(hashFromDatabaseBuffer); // This call. }); } };