本文介紹如何在express中通過使用express-session中間件實作session存儲和讀取使用者登入資訊。
1、安裝express-session中間件
通過以下指令安裝express-session中間件:
npm i express-session
2、引用express-session
在express中通過require引入express-session中間件,然後通過use使用express-session中間件并設定預設參數。
const express = require('express');
const session = require('express-session');
app = express();
app.use(session({
secret: 'fse',
resave: false,
saveUninitialized: true,
}))
3、儲存使用者登入資訊到session
在使用者登入接口中,如果使用者登入成功,則将使用者資訊儲存到req.session屬性中,隻有引用了express-session中間件後,req中才會有session屬性。
// 登入
app.post('/user/login', (req, res) => {
// console.log('req', req);
if(req.body.userName === 'admin' && req.body.password === '111111'){
req.session.user = req.body;
req.session.isLogin = true;
res.send({
status: 0,
msg: '登入成功',
})
} else {
res.send({
status: 1,
msg: '登入失敗',
})
}
})
4、擷取使用者登入資訊
通過判斷session中是否儲存有使用者登入資訊,如果有則傳回登入資訊,否則提示請先登入。
// 擷取登入名
app.get('/user/userName', (req, res) => {
if(!req.session?.isLogin){
res.send({
status: 1,
msg: '請先登入',
})
} else{
res.send(req.session.user.userName);
}
})
5、使用者登出
使用者登出時,通過調用session的destroy方法銷毀session資訊。req.session中的資料将被清空。
// 登出
app.post('/user/loginOut', (req, res) => {
req.session.destroy();
res.send({
status: 0,
msg: '登出成功',
})
})
6、完整的代碼示例
const { urlencoded } = require('body-parser');
const express = require('express');
const session = require('express-session');
app = express();
app.use(session({
secret: 'fse',
resave: false,
saveUninitialized: true,
}))
app.use(urlencoded({ extended:false }));
// 登入
app.post('/user/login', (req, res) => {
// console.log('req', req);
if(req.body.userName === 'admin' && req.body.password === '111111'){
req.session.user = req.body;
req.session.isLogin = true;
res.send({
status: 0,
msg: '登入成功',
})
} else {
res.send({
status: 1,
msg: '登入失敗',
})
}
})
// 擷取登入名
app.get('/user/userName', (req, res) => {
if(!req.session?.isLogin){
res.send({
status: 1,
msg: '請先登入',
})
} else{
res.send(req.session.user.userName);
}
})
// 登出
app.post('/user/loginOut', (req, res) => {
req.session.destroy();
res.send({
status: 0,
msg: '登出成功',
})
})
app.listen(80, () => {
console.log('http://127.0.0.1');
})