筛选Node.js,Express和mysql模块
作者:互联网
我正在努力通过集成node.js的快速框架和mysql模块https://npmjs.org/package/mysql.我有一个简单的应用程序设置(通过使用快速命令行),我还有一个声明用于处理某些数据库属性的模块.
我的数据库模块设置如下:
app.js
node_modules
|___db
|
node_modules
|___mysql
将mysql模块设置为db模块的依赖项.
在我的db模块的index.js中,我有一些模块导出设置供应用程序访问:
/*
* Connection params for database
*/
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'user',
password: 'password',
database: 'database',
});
var connect = connection.connect(function(err){
if(!err){
console.log("You are connected to the database.");
}
else{
throw err;
}
});
var end = connection.end(function(err){
if(!err){
console.log("Mysql connection is terminated.")
}
else{
throw err;
}
});
module.exports = {
connect: connect,
connection: connection,
end: end,
}
在我的app.js文件中,我需要我的db模块并指定一些路由.我也尝试在app.get方法中为客户端路由使用路由中间件函数(estDb):
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes')
, clients = require('./routes/clients')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, db = require('db');
var app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
app.configure('development', function(){
app.use(express.errorHandler());
});
var estDb = function(req, res, next){
db.connect;
db.connection.query("SELECT * FROM Table", function(err, results){
if(!err){
req.results = results;
}
else{
throw err;
}
});
db.end;
next();
}
app.get('/', routes.index);
app.get('/clients', estDb, clients.view);
http.createServer(app).listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
问题
我有的是,当我启动应用程序时,似乎我的db函数(我的模块导出)被调用,因为我正在获取日志:
Express server listening on port 3000
You are connected to mysql.
Mysql connection is terminated.
不是在请求url http:// localhost / clients时(我将路由定义为).正如您所看到的,它在控制台记录“Express服务器侦听端口3000”消息后立即触发db.connect()和db.end() – 这让我相信它是从自定义数据库模块触发的我正在使用.随后,当我去路由http:// localhost / clients时,我收到一个错误:
500 Error: Cannot enqueue Query after invoking quit.
如果我从db模块中删除connection.end()函数,我可以连接到数据库并检索结果;但是,如果我重新加载页面并尝试再次加载结果,我收到一个错误:
Cannot enqueue Handshake after already enqueuing a Handshake
我不明白为什么我启动应用程序时模块导出会被触发?我想这就是我遇到麻烦的地方.
任何建议或帮助都会很棒.
解决方法:
I don’t understand why my module exports are firing when I start the application?
I think this is where I’m getting in trouble.
我相信这是因为这段代码:
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'user',
password: 'password',
database: 'database',
});
在这里,您实际上是连接到数据库,而不是定义一个函数,而不是在被调用时将连接到数据库.
标签:mysql,node-js,express,node-mysql 来源: https://codeday.me/bug/20190620/1246415.html