Nodejs MySQL连接超时
当我运行应用程序,它显示我Database is connected!
db.js
var mysql = require('mysql'); var settings = require('./config'); var db; var exports = {}; exports.connectdb = function () { db = mysql.createConnection(settings.Database); db.connect(function(err){ console.log('connecting'); if(!err) { console.log('Database is connected!'); return db; } else { console.log('Error connecting database!'+err); return null; } }); }; module.exports = exports;
但是当我试图从user.js连接数据库它显示我connection is null
/ TypeError: Cannot read property 'query' of undefined
。
来自user.js的代码块
var exports = {}; var dbcon = require('../config/db.js'); var dbconn = dbcon.connectdb(); exports.login = function(email,password) { var userdetails = { name:email, password:password}; var dbconn = dbcon.connectdb(); if ( dbconn == null ) console.log('still nul'); dbconn.query("SELECT * FROM users where email = '"+email+"' and password = '"+password +"'", function (err, result) { if(err) { console.log(result[0]+' err'); return null; } }); }; module.exports = exports;
Node.js本质上是asynchronous的。 您正试图以同步的方式使用它。 为了使这个工作,你必须使用callback模式。 下面是一个例子:
db.js
var mysql = require('mysql'); var settings = require('./config'); var exports = {}; exports.connectdb = function (callback) { var db = mysql.createConnection(settings.Database); db.connect(function(err){ callback(err,db); }); }; module.exports = exports;
user.js的
var exports = {}; var dbcon = require('../config/db.js'); exports.login = function(email,password) { var userdetails = { name:email, password:password}; dbcon.connectdb(function(err, dbconn){ if ( err) //handle error dbconn.query("SELECT * FROM users where email = '"+email+"' and password = '"+password +"'", function (err, result) { if(err) { console.log(result[0]+' err'); } }); }); }; module.exports = exports;
从上面的代码可以看到connectdb
函数如何接受函数callback。 数据库连接后,代码将执行该callback来发送结果。 在user.js文件中,您现在可以传递一个callback函数并使用它给出的结果(db)。 你可以在这里find更多关于Node.jsasynchronous特性的信息 。 基本上,asynchronous代码使用callback和同步代码使用return
语句。 从asynchronous函数返回值通常会产生空结果,因为调用函数后,asynchronouscallback将始终触发“某个时间段”。
- 对同一个幻象实例使用createPage()两次
- meteor.js&mongoDB – 查询多个字段
- 来自Node-aws的Dynamo Local:所有操作都失败“无法对不存在的表执行操作”
- 使用GitHub Master的NPM包(parse-server)
- Node.js – HTTPS PFX错误:无法加载BIO
- undefined:1 <!DOCTYPE html> ^ SyntaxError:意外的标记<node.js
- 发送一个http请求到一个graphql api时“parsingJSON的问题”
- 最安全的node.js / expressauthentication机制
- 如何将单独的pg-promise查询合并到pg-promise中