導語:
為了避免node后臺太多的session,導致記憶體溢位還有各個后臺行程之間不能通訊的問題,我們就要用到redis來存盤session,來解決這一系列問題,
1,創建檔案conf,在其里面創建db.js,用于存放redis的賬號還有密碼,
//根據開發或者生產模式來選擇資料庫
const env = process.env.NODE_ENV
let MYSQL_CONF
let REDIS_CONF
if (env === 'dev') {
MYSQL_CONF = {
host: 'localhost',
user: 'root',
password: 'xiaomizhou123',
port: '3306',
database: 'mydb'
}
//redis_conf
REDIS_CONF = {
port: 6379,
host: '127.0.0.1'
}
}
if (env === 'production') {
//mysql
MYSQL_CONF = {
host: '172.**.**.**',
user: 'root',
password: 'xiaomizhou123',
port: '3306',
database: 'mydb'
}
//redis_conf
REDIS_CONF = {
port: 6379,
host: '172.**.**.**'
}
}
module.exports = {
MYSQL_CONF,
REDIS_CONF
}
2,安裝依賴和在app.js中添加一些代碼
先安裝兩個依賴
npm i koa-generic-session
npm i koa-redis
接著修改app.js
const session = require('koa-generic-session')
const redisStore = require('koa-redis')
app.keys = ['xiaomizhou#13800_']
app.use(session({
// 配置 cookie
cookie: {
path: '/',
httpOnly: true,
maxAge: 24 * 60 * 60 * 1000
},
// 配置 redis
store: redisStore({
// all: '127.0.0.1:6379' // 寫死本地的 redis
all: `${REDIS_CONF.host}:${REDIS_CONF.port}`
})
}))
搞定,接下來就可以用ctx.session來訪問用戶的session了,具體函式例子如下:
router.get('/list', async function (ctx, next) {
const keyword = ctx.query.keyword || ''
if (ctx.query.isadmin) {
//在session中獲取用戶的賬號資訊
if (ctx.session.username == null) {
console.error('is admin, but no login')
// 回傳未登錄
ctx.body = new ErrorModel('未登錄')
return
}
// 獲取自己的用戶名
author = ctx.session.username
}
//資料庫里面查找該作者,該關鍵詞的資訊,然后回傳
const listData = await getList(author, keyword)
ctx.body = new SuccessModel(listData)
})
補充:

微信搜索【web小館】,回復全堆疊博客專案,即可獲取專案原始碼和后續的實戰文章教程,每天用最簡單樸實的語言,潛移默化的提升你的計算機基礎知識和前端技術,小米粥,一個專注的web全堆疊工程師,我們下期再見!


轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/163556.html
標籤:其他
