Session机制(node)

256 阅读1分钟
const express = require('express')
const app = express()

app.use(express.static(__dirname + '/public'))

let arr = [
  {
    username: 'lcz',
    password: 111111,
    money: 10000,
  },
  {
    username: 'xiaoze',
    password: 222222,
    money: 500,
  },
]

// express-session实现session技术
const session = require('express-session')
app.use(
  session({
    secret: 'keyboard cat', // 用于加密目标数据用的字符串
    resave: false, // resave是指每次请求都重新设置session cookie
    saveUninitialized: true, // saveUninitialized是指无论有没有session cookie,
    // 每次请求都设置个session cookie ,默认给个标示为 connect.sid
  })
)

app.get('/api/login', (req, res) => {
  let { username, password } = req.query
  // 查找用户和密码是否有同时匹配的
  const have = arr.some(
    (obj) => obj.username == username && obj.password == password
  )
  if (have) {
    // 1 将当前正确的用户的信息保存在内存中
    req.session.usern = username
    res.send({
      status: 1,
      msg: '登录成功',
    })
  } else {
    res.send({
      status: 0,
      msg: '账号或密码错误',
    })
  }
})

// 重要 - 多个前端登录验证, 需要用不同的浏览器, 因为一个浏览器的同一个域名下的cookie会被覆盖
app.get('/api/getMoney', (req, res) => {
  // 提取cookie的值, 从express-session内存中提取对应的值
  const username = req.session.usern
  console.log(username); // 当前登录的用户名对应的值
  // 查找余额
  let money = 0
  arr.forEach((obj) => {
    // 刷卡认证 -> 本人持卡
    if (obj.username == username) {
      money = obj.money
    }
  })

  res.send({
    status: 1,
    msg: '获取成功',
    data: money,
  })
})

app.listen(3000, () => {
  console.log('服务器启动了')
})