建立节点应用程序结构
下面的节点表示文件夹架构以构建应用程序。
将Node连接到MySQL数据库需要节点依赖性。
依存关系
安装节点快递& Mysql dependencies.
$ npm install
$ npm install mysql
package.json
{
"name": "expapp",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"gulp": "^3.9.0",
"gulp-develop-server": "^0.5.0",
"gulp-jshint": "^1.12.0",
"jsdoc": "^3.4.0",
"mocha": "^2.3.4",
"should": "^7.1.1",
"supertest": "^1.1.0"
},
"dependencies": {
"async": "^1.5.2",
"body-parser": "^1.14.1",
"connect-multiparty": "^2.0.0",
"connect-redis": "^3.0.1",
"express": "^4.13.3",
"express-session": "^1.12.1",
"fs": "0.0.2",
"http-proxy": "^1.12.0",
"morgan": "^1.6.1",
"multer": "^1.3.0",
"mysql": "^2.9.0",
"node-mysql": "^0.4.2",
"randomstring": "^1.1.5",
"xls-to-json": "^0.3.2",
"xlsx-to-json": "^0.2.4"
}
}
如果要使用相同版本的Node和MySql软件包,请删除 “ ^”.
每次您安装npm(节点程序包模块)时,它都会安装最新版本。
主应用程序文件
声明节点express方法,在其中创建连接池服务 app.js 它连接到数据库。
app.js
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var session = require('express-session');
var db = require('./models/db.js'); // 的MySQL database connection path
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
if(GLOBAL.SQLpool === undefined){
GLOBAL.SQLpool = db.createPool(); //create a global sql pool connection
}
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}));
morgan.token('res', function getId(res) {
return res;
});
var accessLogStream = fs.createWriteStream(__dirname + '/logs/access.log', {flags: 'a'});
app.use(morgan(':req[body] :res[body]', {stream: accessLogStream}));
app.use(require('./controllers'));
app.use('/', express.static(__dirname + '/client'));
app.use('/bower_components', express.static(__dirname + '/bower_components'));
app.listen('3000', function(){
console.log("Connected on port 3000.");
});
哪里:
createPool() :全局创建数据库。
控制器: 包含连接到数据库的API。
全局创建数据库连接,以在整个应用程序中使用以下连接。
数据库连接
- 定义数据库操作。分配主机,用户名,数据库名称&密码(如果有)。
- 然后建立MySQL连接以返回连接对象。
- 之后,建立MySQL连接以开始交易并返回交易连接对象。
/models/db.js
var mysql = require("mysql");
/**
* Defines database operations.
* @class
*/
var DB = function(){};
DB.prototype.createPool = function(){
return mysql.createPool({
host : 'localhost', // Hostname 'localhost' If locally connected
user : 'root', // Username
password : '', // Password
database: '', // Database name
connectionLimit : 100
});
}
/**
* Establishes mysql connection and returns the connection object.
* @function
* @param {object} pool - Mysql pool object.
* @param {function} callback - Callback.
*/
DB.prototype.getConnection = function(pool,callback){
var self = this;
pool.getConnection(function(err, connection) {
if(err) {
//logging here
console.log(err);
callback(true);
return;
}
connection.on('error', function(err) {
if(err.code === "PROTOCOL_CONNECTION_LOST") {
connection.destroy();
} else {
connection.release();
}
console.log(err);
callback(true);
return;
});
callback(null,connection);
});
}
/**
* Establishes mysql connection, begins transaction and returns the transactio connection object.
* @function
* @param {object} pool - Mysql pool object.
* @param {function} callback - Callback.
*/
DB.prototype.createTransaction = function(pool,callback) {
var self = this;
self.getConnection(pool,function(err,connection){
if(err) {
//logging here
console.log(err);
callback(true);
return;
}
connection.beginTransaction(function(err) {
if(err){
console.log(err);
callback(true);
return;
}
callback(null,connection)
});
});
}
module.exports = new DB();