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();
nodejs:搭建express 服务,设置session以及实现退出操作
最新推荐文章于 2024-08-16 07:43:25 发布