This commit is contained in:
桜華 2022-09-25 09:53:34 +08:00
parent 0afe7c9f7c
commit 2523f00fe5
3 changed files with 130 additions and 2 deletions

View File

@ -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
View 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
View 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
}
}