nodejs:搭建express 服务,设置session以及实现退出操作

18 篇文章 0 订阅
const plug_i18next = require('i18next');
const plug_i18nextMiddleware = require('i18next-express-middleware');
const plug_Backend = require('i18next-node-fs-backend');
var plug_express = require('express');
var plug_path = require('path');
var plug_methodOverride = require('method-override');
var plug_session = require('express-session');
var plug_cookieParser = require('cookie-parser');
var plug_multiparty = require('multiparty');
var plug_jade = require('jade');
var plug_favicon = require('serve-favicon');
var child_process = require('child_process');

var plug_errorHandler = require('errorhandler');
var plug_request = require('request');
var plug_httpproxy = require('http-proxy');
var plug_proxy = require('http-proxy-middleware');
var fs = require('fs');
var http = require('http');
var https = require('https');
var app = plug_express();
var jwt = require('jsonwebtoken'); // 使用jwt签名

var PORT = 80;
var SSLPORT = 8888;
var TimeOut = 3600;
app.set('port', SSLPORT);

app.use(plug_session({
    /*可以随便写。 一个 String 类型的字符串,作为服务器端生成 session 的签名 */
    secret: 'QuotPXt',
    name: 'sQt_KYBGRExdetyhLMN0387650XXD',
    /*保存在本地cookie的一个名字 默认connect.sid  可以不设置*/
    /*强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false。*/
    resave: false,
    /*强制将未初始化的 session 存储。 默认值是true 建议设置成true*/
    saveUninitialized: true,
    cookie: {
        maxAge: 1000 * 30 * 60 /*过期时间*/
    },
    /*secure https这样的情况才可以访问cookie*/
    //设置过期时间比如是30分钟,只要游览页面,30分钟没有操作的话在过期
    //在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)
    rolling: true
}));

app.use(plug_cookieParser());

var originalFilename = "";
app.use(plug_express.static(plug_path.join(__dirname, 'static')));

app.use(plug_i18nextMiddleware.handle(plug_i18next));

//合并g_dictRootFromHeader到root中
for (var key in js_headjsonhandle.g_dictRootFromHeader) {
    root[key] = js_headjsonhandle.g_dictRootFromHeader[key];
}

for (var key in root) {
    if (key) {
        renderCommon(key)
    }
}

// 开启HTTPS服务
function func_startHTTPS() {
    //TODO 
    var privateKey = fs.readFileSync('./static/cert/server.key', 'utf8');
    var certificate = fs.readFileSync('./static/cert/server.crt', 'utf8');
    var credentials = { key: privateKey, cert: certificate };
    var httpsServer = https.createServer(credentials, app);
    httpsServer.listen(app.get('port'), '0.0.0.0', function() {
        console.log('HTTPS Server is running on: https://localhost:%s', app.get('port'));
    });
    httpsServer.on('error', (e) => {
        console.error(e);
    });

    function logout(req, res, next) {
        new Promise((resole, rej) => {
            var res_data = {};
            req.session.destroy(function(err) {
                console.log(err);
            })
            res_data.code = 0;
            res_data.msg = "退出成功";
            resole(res_data);
        }).then((res_data) => {
            if (res_data) {
                return res.json(res_data);
            }
        });
    }
    //404
    app.all('*', function(req, res, next) {
        var key = req.url;
        if (req.path == '/CE/logout') {
            logout(req, res, next);
        } else {
            res.redirect('/404');
        }
        next()
    });
}

// 登录网站
app.get('/', function(req, res, next) {
    let host = req.headers.host;
    host = host.replace(/\:\d+$/, '');
    if (!req.cookies.token || req.cookies.token == '0' || req.cookies.token == 'null') {
        if (req.protocol === 'https') {
            return res.redirect(`/login`);
        } else {
            if (SSLPORT == 443) {
                return res.redirect(307, `https://${host}/login`);
            } else {
                return res.redirect(307, `https://${host}:${SSLPORT}/login`);
            }
        }
    } else {
        if (req.protocol === 'https') {
            return res.redirect(`/sa_sec/main_page`);
        } else {
            if (SSLPORT == 443) {
                return res.redirect(307, `https://${host}/sa_sec/main_page`);
            } else {
                return res.redirect(307, `https://${host}:${SSLPORT}/sa_sec/main_page`);
            }
        }
    }
    next()
});


function func_startHTTP() {
    var httpServer = http.createServer(app);
    httpServer.listen(PORT, '0.0.0.0', function() {
        console.log('HTTP Server is running on: http://localhost:%s', PORT);
    });
}

function startServer() {
    func_startHTTP();
    func_startHTTPS();
}

startServer();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千码君2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值