mysql+Express開(kāi)發(fā)小記:完成用戶注冊(cè)和登錄

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.itdecent.cn/p/0a161f341771

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 總得提供點(diǎn)東西吸引著大家。VIP視頻解析程序也就是可以看各大站的vip視頻了。(噓!反正我試了騰訊和愛(ài)奇藝)鏈接:...
    實(shí)在想不出昵稱丶閱讀 263評(píng)論 0 0
  • 20170504,前兩天菠蘿仔生病請(qǐng)假,今天一大早6:30就自己起床要去幼兒園,回到家精神還是不太好,不想說(shuō)話,也...
    f魔夜閱讀 760評(píng)論 0 1

友情鏈接更多精彩內(nèi)容