Express
最后修改: 2019-11-14
之前自学过一段时间的nodejs,放的久了,有点忘记了,重新温故一下,这篇文章里面用express做了一个简易的web应用,其中的session使用redis操作
// 添加相应的模块
const express = require('express');
const session = require('express-session');
// 查询字符串模块
const querystring = require('querystring');
const redis = require('redis');
const RedisStore = require('connect-redis')(session);
// 本地监听地址端口配置
var app = express();
const LOCAL_CONF = {
port: 3000,
host: '0.0.0.0'
};
// Redis远程地址和端口
const REDIS_CONF = {
port: 6379,
host: 'xxx'
};
// 连接远程服务器Redis
client = redis.createClient(REDIS_CONF.port, REDIS_CONF.host);
// 使用connect-redis配置session
app.use(session({
store: new RedisStore({client: client}),
secret: "activity",
resave: false,
saveUninitialized: true
}));
// path为/得情况,使用回调函数处理
app.get('/', function (req, res) {
// 设置返回头格式:json并编码
res.setHeader('content-type', 'application/json; charset=utf-8');
// 初始化相关变量,这个kv_data是个字典,用来前端返回的
const kv_data = {};
const url = req.url;
// 解析path
req.path = url.split('?')[0];
// 解析query
req.query = querystring.parse(url.split('?')[1]);
// 解析search参数
const params = new URLSearchParams(req.query);
// 判断search参数是否为空对象,是的话就说明访问/,不是就说明有参数
if (JSON.stringify(req.query) === "{}") {
// 数组是否为空,为空就提示异常返回msg
if (!req.session.ka) {
kv_data.msg = '请先添加querystring参数,再直接访问';
} else {
// 数组不为空的话就会循环迭代这个数组的值,也就是querystring中参数的key,然后从session中取值循环赋值给这个字典
for (const k_name of req.session.ka) {
kv_data[k_name] = req.session[k_name];
}
}
} else {
// 初始化空数组,或者有值的话直接追加querystring中的key
req.session.ka = req.session.ka || [];
// 遍历一下params中的k-v
params.forEach((value, name) => {
if (value) {
// 将key-value存入session-redis中
req.session[name] = value;
// 将key存入req.session.ka数组中
req.session.ka.push(name);
}
});
// 相关提示信息
kv_data.msg = 'querystring参数添加成功,请直接访问根路径查看';
}
// 返回格式化的JSON串串
res.end(JSON.stringify(kv_data));
});
// 利用express模块最后监听一下端口
app.listen(LOCAL_CONF.port, () => {
console.log(`Running at http://${LOCAL_CONF.host}:${LOCAL_CONF.port}`)
});