数据库
首页 > 数据库> > 筛选Node.js,Express和mysql模块

筛选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