最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Express實(shí)現(xiàn)登錄驗(yàn)證

 更新時(shí)間:2021年10月13日 09:39:09   作者:aiguangyuan  
這篇文章主要為大家詳細(xì)介紹了Express實(shí)現(xiàn)登錄驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Express實(shí)現(xiàn)登錄驗(yàn)證的具體代碼,供大家參考,具體內(nèi)容如下

Express實(shí)現(xiàn)的路由登錄,這套代碼適用于很多場(chǎng)景,特此記錄,以備后用。

首先是主文件:server.js

const express = require('express');
const static = require('express-static');
const bodyParser = require('body-parser');
const multer = require('multer');
// 配置文件上傳的路徑,此處為本地地址
const multerObj = multer({ dest: './static/upload' });
const cookieParser = require('cookie-parser');
const cookieSession = require('cookie-session');
const consolidate = require('consolidate');
 
// 子路由的頁(yè)面需要使用,此處確保已安裝
const expressRoute = require('express-route');
const mysql = require('mysql');
 
var server = express();
server.listen(8080);
 
// 處理提交的數(shù)據(jù)和文件
server.use(bodyParser.urlencoded());
server.use(multerObj.any());
 
// cookie及簽名處理
server.use(cookieParser());
(function () {
    var keys = [];
    for (var i = 0; i < 100000; i++) {
        keys[i] = 'secret' + Math.random();
    };
    server.use(cookieSession({
        name: 'session_id',
        keys: keys,
        maxAge: 20 * 60 * 1000  
    }));
})();
 
// 模板渲染
server.engine('html', consolidate.ejs);
server.set('views', 'template');
server.set('view engine', 'html');
 
// 路由拆分
server.use('/', require('./route/web/index.js')());        //前臺(tái)路由
server.use('/admin/', require('./route/admin/index.js')());   //后臺(tái)路由
 
// 靜態(tài)數(shù)據(jù)
server.use(static('./static/'));

以上這是一個(gè)整體的結(jié)構(gòu)框架,后續(xù)只需要專注處理路由部分即可,以下是后臺(tái)路由部分。

const express = require('express');
 
module.exports = function () {
 
    var router = express.Router();
 
    // 未登錄前
    router.use((req, res, next) => {
        if (!req.session['admin_id'] && req.url != '/login') { 
            res.redirect('/admin/login');
        } else {
            next();
        }
    });
    router.use('/login', require('./login')());
 
    
    // 正常登錄后后其它路由
    router.get('/', (req, res) => {
        res.render('admin/index.ejs', {});
    });
    // 根據(jù)業(yè)務(wù)添加路由
    router.use('/banners', require('./banners')());
 
    return router;
};

express的模塊化其實(shí)就是按路由一級(jí)一級(jí)的來(lái)定義的,接下來(lái)一起來(lái)看一下上面代碼中l(wèi)ogin代碼的實(shí)現(xiàn).

const express = require('express');
// 封裝的公共方法(md5)加密模塊
const common = require('../../libs/common');
const mysql = require('mysql');
 
var db = mysql.createPool({ 
    host: 'localhost', 
    user: 'root', 
    password: '123456', 
    database: 'blog' 
});
 
module.exports = function () {
    var router = express.Router();
    router.get('/', (req, res) => {
        res.render('admin/login.ejs', {});
    });
    
    router.post('/', (req, res) => {
        var username = req.body.username;
        var password = common.md5(req.body.password + common.MD5_SUFFIX);
        db.query(`SELECT * FROM admin_table WHERE username='${username}'`, (err, data) => {
            if (err) {
                // 返回的數(shù)據(jù)很簡(jiǎn)單,實(shí)際要返回一個(gè)對(duì)象
                res.status(500).send('數(shù)據(jù)庫(kù)連接錯(cuò)誤').end();
            } else {
                if (data.length == 0) {
                    res.status(400).send('管理員不存在').end();
                } else {
                    if (data[0].password == password) {
                        req.session['admin_id'] = data[0].ID;
                        res.redirect('/admin/');
                    } else {
                        res.status(400).send('密碼錯(cuò)誤').end();
                    }
                }
            }
        });
    });
 
    return router;
};

大家可能注意到上面的代碼中有個(gè)common模塊的引入,這個(gè)文件主要是定義了一些公共的方法,如md5加密方法。

const crypto = require('crypto');
module.exports = {
    MD5_SUFFIX: 'FDSW$t34tregt5tO&$(#RHuyoyiUYE*&OI$HRLuy87odlfh)',
    md5: function (str) {
        var obj = crypto.createHash('md5');
        obj.update(str);
        return obj.digest('hex');
    }
};

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Node.js中path模塊操作路徑的基本使用

    Node.js中path模塊操作路徑的基本使用

    這篇文章主要介紹了Node.js中path模塊操作路徑的基本使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 異步JavaScript編程中的Promise使用方法

    異步JavaScript編程中的Promise使用方法

    這篇文章主要介紹了異步JavaScript編程中的Promise使用方法,包含Ajax的結(jié)合操作等問(wèn)題,需要的朋友可以參考下
    2015-07-07
  • node.js中的console.dir方法使用說(shuō)明

    node.js中的console.dir方法使用說(shuō)明

    這篇文章主要介紹了node.js中的console.dir方法使用說(shuō)明,本文介紹了console.dir的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • NestJS中集成TypeORM進(jìn)行數(shù)據(jù)庫(kù)操作

    NestJS中集成TypeORM進(jìn)行數(shù)據(jù)庫(kù)操作

    本文深入探討了如何在NestJS中集成TypeORM進(jìn)行數(shù)據(jù)庫(kù)操作,包括TypeORM的配置和集成、實(shí)體設(shè)計(jì)和關(guān)系映射、Repository模式的應(yīng)用、事務(wù)處理方案、數(shù)據(jù)庫(kù)遷移管理、性能優(yōu)化策略
    2024-12-12
  • 詳解nvm管理多版本node踩坑

    詳解nvm管理多版本node踩坑

    這篇文章主要介紹了詳解nvm管理多版本node踩坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Node.js實(shí)現(xiàn)文件上傳

    Node.js實(shí)現(xiàn)文件上傳

    這篇文章主要介紹了Node.js實(shí)現(xiàn)文件上傳的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • Nodejs+angularjs結(jié)合multiparty實(shí)現(xiàn)多圖片上傳的示例代碼

    Nodejs+angularjs結(jié)合multiparty實(shí)現(xiàn)多圖片上傳的示例代碼

    這篇文章主要介紹了Nodejs+angularjs結(jié)合multiparty實(shí)現(xiàn)多圖片上傳的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • node.js-path模塊你了解多少

    node.js-path模塊你了解多少

    這篇文章主要為大家詳細(xì)介紹了node.js-path模塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • 基于node.js實(shí)現(xiàn)爬蟲(chóng)的講解

    基于node.js實(shí)現(xiàn)爬蟲(chóng)的講解

    今天小編就為大家分享一篇關(guān)于基于node.js實(shí)現(xiàn)爬蟲(chóng)的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • 使用NVM實(shí)現(xiàn)不同nodejs版本的自由切換

    使用NVM實(shí)現(xiàn)不同nodejs版本的自由切換

    在工作中,我們可能需要同時(shí)進(jìn)行多個(gè)不同NodeJS版本的項(xiàng)目開(kāi)發(fā),這種情況下,對(duì)于維護(hù)多個(gè)版本的node將會(huì)是一件非常麻煩的事情,NVM就是為解決這個(gè)問(wèn)題而產(chǎn)生的,本文給出了下載、安裝及使用方法,需要的朋友可以參考下
    2024-02-02

最新評(píng)論

班玛县| 长丰县| 巢湖市| 双桥区| 昌江| 黄平县| 揭西县| 蓬安县| 新干县| 鄂伦春自治旗| 东兴市| 普定县| 华亭县| 华亭县| 昌图县| 晋江市| 郓城县| 常熟市| 习水县| 苏尼特左旗| 杭锦后旗| 南昌县| 济南市| 庆元县| 玉环县| 宣武区| 阳城县| 华阴市| 棋牌| 镇雄县| 罗田县| 扎囊县| 昌乐县| 山西省| 咸丰县| 诸城市| 张掖市| 建始县| 延边| 象州县| 南昌县|