1.安裝
1.1安裝mysql對(duì)應(yīng)的驅(qū)動(dòng)碉克,
npm install mysql
1.2安裝第三方插件express-connection
npm install express-connection
2.配置數(shù)據(jù)庫(kù),在models下新建DBConfig.js
代碼:
module.exports = {
mysql: {
host: '222.31.81.214',
user: 'XXX',
password: 'XXX',
database: 'big_data_service', // 前面建的user表位于這個(gè)數(shù)據(jù)庫(kù)中
port: 3306,
charset:"utf8"
}
};
3.在userinfo.js中使用數(shù)據(jù)庫(kù)
// 導(dǎo)入MySQL模塊
var crypto = require('crypto');//使用加密
var mysql = require('mysql');
var dbConfig = require('../models/DBConfig');
4.使用連接池
pool.getConnection(function(err, connection) {
// Use the connection
connection.query( 'SELECT something FROM sometable', function(err, rows) {
// And done with the connection.
connection.release();
// Don't use the connection here, it has been returned to the pool.
});
});
關(guān)閉連接池:
pool.end(function (err) {
// all connections in the pool have ended
});
5.使用session
在app.js中配置
var session = require('express-session');
//使用session
//這里傳入了一個(gè)密鑰加session id
//使用靠就這個(gè)中間件
app.use(session({ secret: 'wilson'}));
6.userinfo.js 功能塊完整代碼
var express = require('express');
var router = express.Router();
// 導(dǎo)入MySQL模塊
var crypto = require('crypto');
var mysql = require('mysql');
var dbConfig = require('../models/DBConfig');
/* GET users listing. */
//注冊(cè)
var pool = mysql.createPool(dbConfig.mysql);
router.get('/reg', function(req, res, next) {
res.render('register', {
title: 'rester',
success: req.flash('success').toString() || '',
error: req.flash('error').toString() || '',
username: req.session.username
});
})
router.post('/reg', function(req, res, next) {
//req.body 處理 post 請(qǐng)求
var username = req.body.username,
password = req.body.password,
email = req.body.email,
passwordRepeat = req.body.passwordRepeat;
if (password != passwordRepeat) {
console.log('兩次輸入的密碼不一致!');
req.flash('error', "兩次輸入的密碼不一致");
return res.redirect('/userinfo/reg');
}
//對(duì)密碼加密
var md5 = crypto.createHash('md5'),
md5password = md5.update(password).digest('hex');
var promise = new Promise(function(resolve, reject) {
pool.getConnection(function(err, connection) {
if (err) {
reject(err);
} else {
connection.query('SELECT * FROM userinfo WHERE username = ?', [username],
function(err, rows, fields) {
if (err) {
reject(err);
} else {
resolve(rows);
}
connection.release();
});
}
});
});
promise.then(function(rows1) {
console.log('查找user執(zhí)行成功');
pool.getConnection(function(err, connection) {
if (err) {
console.log(err);
} else {
if (rows1.length > 0) {
console.log('rows' + rows1);
console.log('用戶名已經(jīng)存在');
req.flash('error', "用戶名已經(jīng)存在");
return res.redirect('/userinfo/reg');
} else {
connection.query('INSERT INTO userinfo(username,password,email) VALUES(?,?,?)', [username, md5password, email],
function(err, rows2, fields) {
if (err) {
console.log(err);
} else {
req.flash('success', "注冊(cè)成功较性!");
delete password;
req.session.username = username;
return res.redirect('/');
}
connection.release();
});
}
}
});
}, function(err) {
console.log(err);
});
});
//登錄
router.get('/login', function(req, res, next) {
res.render('login', {
title: 'login',
success: req.flash('success').toString() || '',
error: req.flash('error').toString() || '',
username: req.session.username
});
})
router.post('/login', function(req, res, next) {
var username = req.body.username,
password = req.body.password;
var md5 = crypto.createHash('md5'),
md5password = md5.update(password).digest('hex');
var promise = new Promise(function(resolve, reject) {
pool.getConnection(function(err, connection) {
if (err) {
reject(err);
} else {
connection.query('SELECT * FROM userinfo WHERE username = ? AND password=?', [username, md5password],
function(err, rows, fields) {
if (err) {
reject(err);
} else {
resolve(rows);
}
connection.release();
});
}
});
});
promise.then(function(rows1) {
console.log('查找user執(zhí)行成功');
pool.getConnection(function(err, connection) {
if (err) {
console.log(err);
} else {
if (rows1.length > 0) {
console.log('rows 登錄成功' + rows1);
req.flash('success', "登錄成功!");
req.session.username = username;
delete password;
console.log('sessiom' + req.session.username);
return res.redirect('/');
} else {
console.log("用戶或密碼不正確");
req.flash('error', "用戶或密碼不正確");
return res.redirect('back');
}
}
});
}, function(err) {
console.log(err);
});
})
//用戶退出
router.get('/logout', function(req, res, next) {
req.session.username = null;
req.flash('success', "退出登錄成功眉枕!");
return res.redirect('/');
})
pool.end(function (err) {
// all connections in the pool have ended
console.log(err);
});
module.exports = router;
參考文檔:
1.http://borninsummer.com/2015/04/14/notes-on-nodejs-express-mysql-and-promise/
2.http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html
3.http://www.cnblogs.com/sword-successful/p/5234890.html
4.http://www.reibang.com/p/0a161f341771