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}`)
});