cache
This commit is contained in:
parent
0afe7c9f7c
commit
2523f00fe5
23
index.js
23
index.js
@ -73,11 +73,30 @@ function session_list(req, res) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
import Cache from './cache.js'
|
||||||
|
const cache = new Cache()
|
||||||
|
|
||||||
// 登录会话
|
// 登录会话
|
||||||
function session_create(req, res) {
|
function session_create(req, res) {
|
||||||
return db('user').findOne({ name: req.body.name }, function (err, doc) {
|
let { mobile, code, name, password } = req.body
|
||||||
|
|
||||||
|
// 也许使用验证码登录(临时验证码) && code !== '000000'
|
||||||
|
if (mobile && code) {
|
||||||
|
if (code !== cache.get(mobile)) return res.status(400).send('验证码错误')
|
||||||
|
return db('user').findOne({ mobile }, function (err, doc) {
|
||||||
|
if (!doc) return res.status(400).send('账户不存在')
|
||||||
|
return req.session.regenerate(function (err) {
|
||||||
|
req.session.account = { uid: doc._id, gid: doc.gid ?? 0 }
|
||||||
|
let { salt, password, ...user } = doc
|
||||||
|
return res.json(user)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 也许使用账号密码登录
|
||||||
|
return db('user').findOne({ name }, function (err, doc) {
|
||||||
if (!doc) return res.status(400).send('账户不存在')
|
if (!doc) return res.status(400).send('账户不存在')
|
||||||
if (md5(req.body.password + doc.salt) !== doc.password) return res.status(400).send('密码错误')
|
if (md5(password + doc.salt) !== doc.password) return res.status(400).send('密码错误')
|
||||||
return req.session.regenerate(function (err) {
|
return req.session.regenerate(function (err) {
|
||||||
req.session.account = { uid: doc._id, gid: doc.gid ?? 0 }
|
req.session.account = { uid: doc._id, gid: doc.gid ?? 0 }
|
||||||
let { salt, password, ...user } = doc
|
let { salt, password, ...user } = doc
|
||||||
|
21
src/cache.js
Normal file
21
src/cache.js
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// 实现一个简单的缓存,默认10分钟自动过期
|
||||||
|
export default class Cache {
|
||||||
|
constructor(date=10) {
|
||||||
|
this.date = date * 60 * 1000;
|
||||||
|
this.cache = new Map();
|
||||||
|
}
|
||||||
|
set(key, value) {
|
||||||
|
this.cache.set(key, { value, expire: Date.now() + this.date });
|
||||||
|
}
|
||||||
|
get(key) {
|
||||||
|
let item = this.cache.get(key);
|
||||||
|
if (!item) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (item.expire < Date.now()) {
|
||||||
|
this.cache.delete(key);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return item.value;
|
||||||
|
}
|
||||||
|
}
|
88
src/restful.js
Normal file
88
src/restful.js
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
// 标准
|
||||||
|
// 所有访问路径皆为对象
|
||||||
|
// 所有对象都有共同的属性和方法
|
||||||
|
// 使用权限管理
|
||||||
|
|
||||||
|
// 因此, 一个 RESTful API 的模型
|
||||||
|
// 由无限对象组成
|
||||||
|
// 由无限权限组成
|
||||||
|
// 由无限方法组成
|
||||||
|
|
||||||
|
// 对象
|
||||||
|
export class object {
|
||||||
|
// 对象可以删除, 修改, 添加子项
|
||||||
|
// 对象可以赋权, 取消赋权, 引用赋权
|
||||||
|
|
||||||
|
constructor(id) {
|
||||||
|
// 通过 ID 载入对象(虚拟)
|
||||||
|
// 仅在确实读取到数据时, 才会从数据库中读入数据
|
||||||
|
}
|
||||||
|
|
||||||
|
PUT(data) {
|
||||||
|
// data, 应具有对象模型的基本属性
|
||||||
|
// ID, 名称, 描述, 父级, 权限, 子项
|
||||||
|
}
|
||||||
|
|
||||||
|
PATCH(data) {}
|
||||||
|
|
||||||
|
DELETE() {
|
||||||
|
// 删除对象(自身而不是子项)
|
||||||
|
// 从数据库删除对象
|
||||||
|
// 从内存中删除对象
|
||||||
|
// 因此, 对象是虚拟的, 并没有数据
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 权限
|
||||||
|
export class permission {
|
||||||
|
}
|
||||||
|
|
||||||
|
// 方法
|
||||||
|
export class method {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 数据并不需要固定的模型
|
||||||
|
// 因为只要及时更改迁移或虚拟引用(集,交集,并集,差集)
|
||||||
|
|
||||||
|
|
||||||
|
// (因为后端程序的用意, 便是灵活管理数据)
|
||||||
|
// 权限也只是一个数据集(虚拟)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 无限虚拟集中取常用集及查询方式(针对反复查询的纬度建立索引)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 1. 无限新建对象
|
||||||
|
// 2. 无限新建集合(集合模型)(虚拟对象)
|
||||||
|
// 3. 对象归类于集合
|
||||||
|
// 4. 权限是集合之一
|
||||||
|
|
||||||
|
// 单体数据也属于集合(非重复)
|
||||||
|
// 单体数据只有摘要
|
||||||
|
// 没有关联数据不需要关系型数据库
|
||||||
|
|
||||||
|
// 使用 levelDB 作为数据库, 无需配置依赖
|
||||||
|
// 无限创建库
|
||||||
|
|
||||||
|
import level from 'level'
|
||||||
|
|
||||||
|
export class mono {
|
||||||
|
constructor() {
|
||||||
|
// 无需初始化基础库, ROOT无需注册
|
||||||
|
// 载入热数据
|
||||||
|
}
|
||||||
|
|
||||||
|
检查并创建目录(dirname) {
|
||||||
|
if (fs.existsSync(dirname)) {
|
||||||
|
return true
|
||||||
|
} else if (thiss.检查并创建目录(path.dirname(dirname))) {
|
||||||
|
fs.mkdirSync(dirname)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user