Javascript 在nodeJS中导出Mysql连接

Javascript 在nodeJS中导出Mysql连接,javascript,node.js,node-mysql,Javascript,Node.js,Node Mysql,在我的database.js中 var Mysql = require('Mysql'); var Jwt = require('jsonwebtoken'); var bcrypt = require('bcrypt'); var supersecretkey = 'JMDub_Super_Secret_key'; var config = require('./config'); var signupErrors = require('./Signuperrors.js'); var s

在我的database.js中

var Mysql = require('Mysql');
var Jwt = require('jsonwebtoken');
var bcrypt = require('bcrypt');

var supersecretkey = 'JMDub_Super_Secret_key';

var config = require('./config');
var signupErrors = require('./Signuperrors.js');
var sucessMsg = require('./SucessMessages.js');
var App_errors = require('./error.js');
var query = require('./queryDB.js');

var connection = Mysql.createConnection({
                    "host": "******",  
                    "user": "****", 
                "password": "***", 
                "database": "***"
                });

connection.connect(function(err) {
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;
  }
  console.log('connected as id ' + connection.threadId);
});


//Sign Up Methods 
var createUser = function createwithCredentails(post,callback) {
    bcrypt.hash(post.password, 10, function(err, hash){
//console.log('Cache Hash : +',hash);
    var createUserQuery = connection.query('INSERT INTO users SET ?',{"email":post.email,"password":hash,"username":post.username},function(err,result){
        if (err) {
            if (err.code == 'ER_DUP_ENTRY') {
                //console.log(err.code);
                callback(signupErrors.error_5000);
            }
            else callback(App_errors.error_1003);
        }
        if (result) {
            callback(sucessMsg.success_signup);
        }
    });
    });
}

//connection.query('SELECT * FROM Users Where Username = '' AND Password = ''');

var validateUser = function ValidateUserWithUserNameAndPassword(post,callback) {
    var UserCheckQuery = connection.query('SELECT * FROM users WHERE email="'+post.email+'"',function(err, results, fields) {
    if (err){
        console.log(err);
        callback(App_errors.error_1000);
    }
    if (results.length == 1) {
    //console.log(results[0].password,post.password);
        var givenPassword = post.password;
        var DBhash = results[0].password;
            bcrypt.compare(givenPassword, DBhash,function(err, res) {
                if (res) {
                    console.log('Password matched');
                     var token = Jwt.sign({"email":post.email,"username":post.username},supersecretkey, {
                        expiresIn: 60*60*5 // expires in 5 hours
                     });

                     callback({
                        message:{
                            "success":1,
                            "description":"sucessfully logged in - please cache the token for any queries in future",
                            "environment":"test",
                            "errorCode":null
                  },
                  "token":token
              });

                }
                if (!res) {
                    console.log('password doesnt match');
                    callback(signupErrors.error_6000);
                }
                if (err) {
                    console.log('Error Comparing Passwords');
                    callback(App_errors.error_1004);
                }

            });

    }
    else{
        callback(signupErrors.error_6000);
    }
    });
};

var isauthenticate = function isauthenticated(post,route,callback) {
    if (post.headers.token) {
        Jwt.verify(post.headers.token, supersecretkey, function(err, decoded) {
        if (decoded) {
            //console.log(decoded);
        //From this part the user is Sucessully Authenticated and autherization params can be extracted from token if required
        //Write Business Logic in future as per the requirement

        //Operation 1 - Update Profile
        //Profile Details consists of {1.first name 2.last name 3. profile pictur(base 64 encoded) 4.further settings in future that can be added to DB if required}
        if (route == '/update-profile') {
          query.updateProfile(connection,decoded.email,post.body,function(response) {
            callback(response);
          });
        }

            //callback({"message":"is a valid token"});
        }
        if (decoded == null) {
            console.log('is not a valid token');
            //callback(App_errors.error_1000);
        }
        if (err) {
            console.log('error verifying token');
            callback(App_errors.error_1000);
        }
});

    }
    else{
        callback(App_errors.error_1001);
    }
};

module.exports = {
    validateUser:validateUser,
    createUser:createUser,
    isauthenticate:isauthenticate,
    connection:connection
}
我正在将连接对象导出到queryDB.js文件。但当我尝试记录导出的连接对象时,我得到了未定义的对象。为什么会这样

当我将连接对象作为函数参数传递时,一切正常。不知道为什么

下面是queryDB.js文件

    var errors = require('./error.js')
var Dbconnection = require('./Database.js').connection;
var updateProfile = function profiledata(connection,email,data,callback) {
    console.log(Dbconnection);
    if ((!data)|| (Object.keys(data).length < 1)) {
        //console.log(data);
        callback(errors.error_1001);
    }

    else{
        callback({"message":"update Sucesss"});
        //console.log(connection);
        //var updateData = mapProfileDataTomodel(data);
        //console.log(updateData);
     connection.query('SELECT * FROM users WHERE email = "'+email+'"',function(err, result,feilds) {
       if (err) throw err;
       if (result) {
       console.log(result);
       }
     });
    }
}

var mapProfileDataTomodel = function mapProfileDataTomodel(data) {
    var profileDataModel = {};
for (var key in data) {
    //console.log('looping and mapping data');
        if (data.firstname) {
            profileDataModel.firstname = data.firstname;
        }
        if (data.lastname) {
            profileDataModel.lastname = data.lastname;
        }
        if (data.profilepic) {
            profileDataModel.profilepic = data.profilepic;
        }
    }   
return profileDataModel;
}


module.exports = {
    updateProfile:updateProfile
}
var errors=require('./error.js')
var Dbconnection=require('./Database.js').connection;
var updateProfile=函数配置文件数据(连接、电子邮件、数据、回调){
log(Dbconnection);
if((!data)| |(Object.keys(data.length<1)){
//控制台日志(数据);
回调(errors.error_1001);
}
否则{
回调({“消息”:“更新成功”});
//控制台日志(连接);
//var updateData=mapProfileDataTomodel(数据);
//console.log(updateData);
connection.query('SELECT*FROM users WHERE email=“”+email+””,函数(err、result、feilds){
如果(错误)抛出错误;
如果(结果){
控制台日志(结果);
}
});
}
}
var mapProfileDataTomodel=函数mapProfileDataTomodel(数据){
var profileDataModel={};
for(var输入数据){
//log(“循环和映射数据”);
if(data.firstname){
profileDataModel.firstname=data.firstname;
}
if(data.lastname){
profileDataModel.lastname=data.lastname;
}
if(data.profilepic){
profileDataModel.profilepic=data.profilepic;
}
}   
返回profileDataModel;
}
module.exports={
updateProfile:updateProfile
}
我已经通过函数参数注释掉了连接对象日志

那么,为什么我无法获取导出的连接对象呢?但我在app.js文件中使用了相同的导出连接对象。它在那里工作得很好