NoSQL数据库(五)022-Egg+Redis+MongoDb实现登录流程——业务流程梳理 & 安装依赖与页面编写
业务流程
实现代码
项目初始化
npm init egg --type=simple
项目依赖
- egg-mongoose
- egg-redis
- egg-session
{
"name": "session-redis",
"version": "1.0.0",
"description": "",
"private": true,
"egg": {
"declarations": true
},
"dependencies": {
"egg": "^2.15.1",
"egg-mongoose": "^3.2.0",
"egg-redis": "^2.4.0",
"egg-scripts": "^2.11.0",
"egg-session": "^3.1.0",
"egg-view-nunjucks": "^2.2.0"
},
"devDependencies": {
"autod": "^3.0.1",
"autod-egg": "^1.1.0",
"egg-bin": "^4.13.1",
"egg-ci": "^1.11.0",
"egg-mock": "^3.21.0",
"eslint": "^5.13.0",
"eslint-config-egg": "^7.1.0"
},
"engines": {
"node": ">=10.0.0"
},
"scripts": {
"start": "egg-scripts start --daemon --title=egg-server-session-redis",
"stop": "egg-scripts stop --title=egg-server-session-redis",
"dev": "egg-bin dev",
"debug": "egg-bin debug",
"test": "npm run lint -- --fix && npm run test-local",
"test-local": "egg-bin test",
"cov": "egg-bin cov",
"lint": "eslint .",
"ci": "npm run lint && npm run cov",
"autod": "autod"
},
"ci": {
"version": "10"
},
"repository": {
"type": "git",
"url": ""
},
"author": "",
"license": "MIT"
}
插件配置
config.session = {
encrypt: false,
signed: false,
}
config.redis = {
client: {
port: 6379,
host: '127.0.0.1',
password: 'auth',
db: 0,
}
}
config.mongoose = {
url: 'mongodb://127.0.0.1/redis-mongoose',
options: {},
}
module.exports = {
nunjucks: {
enable: true,
package: 'egg-view-nunjucks',
},
redis: {
enable: true,
package: 'egg-redis',
},
session: true,
mongoose: {
enable: true,
package: 'egg-mongoose',
}
};
路由
module.exports = app => {
const { router, controller } = app;
router.get('/', controller.home.index);
router.get('/sign', controller.login.signHtml);
router.post('/api/sign', controller.login.sign);
router.get('/login', controller.login.loginHtml);
router.post('/api/login', controller.login.login);
router.get('/logout', controller.login.logout);
};
控制器
'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
async index() {
const { ctx } = this;
if (ctx.session.login) {
await ctx.render('home');
} else {
ctx.redirect('/login');
}
}
}
module.exports = HomeController;
'use strict';
const Controller = require('egg').Controller;
class SignController extends Controller {
async signHtml() {
const { ctx, app } = this;
await ctx.render('sign');
}
async sign() {
const { ctx, app } = this;
const requestBody = ctx.request.body;
await ctx.model.User.insertMany({
username: requestBody.username,
password: requestBody.password
});
ctx.body = '<h1>注册成功!</h1>';
}
async loginHtml() {
const { ctx, app } = this;
await ctx.render('login');
}
async login() {
const { ctx, app } = this;
const requestBody = ctx.request.body;
const inputPassword = requestBody.password;
const findUser = await ctx.model.User.find({
username: requestBody.username,
});
if (findUser.length && findUser[0].password === inputPassword) {
ctx.session.login = true;
ctx.redirect('/');
} else {
ctx.redirect('/login');
}
}
async logout() {
const { ctx, app } = this;
ctx.session.login = false;
ctx.redirect('/login');
}
}
module.exports = SignController;
model
// {app_root}/app/model/user.js
module.exports = app => {
const mongoose = app.mongoose;
const Schema = mongoose.Schema;
const UserSchema = new Schema({
username: { type: String },
password: { type: String },
});
return mongoose.model('User', UserSchema);
}