Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了筛选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.con@L_874_20@ure(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.con@L_874_20@ure('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

我不明白为什么我启动应用程序时模块导出会被触发?我想这就是我遇到麻烦的地方.

任何建议或帮助都会很棒.

解决方法

我相信这是因为这段代码

var MysqL = require('MysqL');
var connection = MysqL.createConnection({
  host: 'localhost',});

在这里,您实际上是连接到数据库,而不是定义一个函数,而不是在被调用时将连接到数据库.

大佬总结

以上是大佬教程为你收集整理的筛选Node.js,Express和mysql模块全部内容,希望文章能够帮你解决筛选Node.js,Express和mysql模块所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。