当前位置:网站首页 > 数据科学与大数据 > 正文

NoSQL数据库(五)022-Egg+Redis+MongoDb实现登录流程——业务流程梳理 & 安装依赖与页面编写

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, // maxAge: 10000 } config.redis = { 
    client: { 
    port: 6379, // Redis port host: '127.0.0.1', // Redis host password: 'auth', db: 0, } } config.mongoose = { 
    url: 'mongodb://127.0.0.1/redis-mongoose', options: { 
   }, // mongoose global plugins, expected a function or an array of function and options } 
/ @type Egg.EggPlugin */ module.exports = { 
    // had enabled by egg // static: { 
    // enable: true, // } 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); }; 
控制器
//app/controller/home.js '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; 
// app/controller/login.js 'use strict'; const Controller = require('egg').Controller; class SignController extends Controller { 
    async signHtml() { 
    const { 
    ctx, app } = this; // console.log(user); await ctx.render('sign'); } async sign() { 
    const { 
    ctx, app } = this; // console.log('================',ctx.request.body); const requestBody = ctx.request.body; await ctx.model.User.insertMany({ 
    username: requestBody.username, password: requestBody.password }); // console.log(user); 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'); } // console.log('findUser', findUser) } 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); } 
到此这篇NoSQL数据库(五)022-Egg+Redis+MongoDb实现登录流程——业务流程梳理 & 安装依赖与页面编写的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • js之对象分类、数据类型分类和存储位置、函数 function介绍、变量的作用域2024-11-30 09:18:08
  • vue3中,方法之对象深拷贝、判断对象的数据类型2024-11-30 09:18:08
  • vue3进阶(四)——export function导出定义数据和接口数据 &封装el-select组件 & 获取sessionStorage中的基准地址apiUrl & watch和toRefs写法2024-11-30 09:18:08
  • axios配置多个接口请求(二)——vue项目axios配置多个IP地址,并进行请求数据2024-11-30 09:18:08
  • vue3封装表单组件(二)02之el-tree-select组件的使用——懒加载、数据回显 & el-tree和el-select的结合体2024-11-30 09:18:08
  • NoSQL数据库(五)01-mongoDB入门——介绍与应用场景、安装与可视化工具 & 使用node-mongodb-native进行增删改查2024-11-30 09:18:08
  • NoSQL数据库(四)-memcached——介绍-分布式内存对象缓存系统、安装、api之set设置、add新增、replace替换、append追加2024-11-30 09:18:08
  • NoSQL数据库(三)05-Redis进阶与实战——总结之事务-错误处理和watch、过期时间、sort排序、by排序 & noedjs操作redis数据库2024-11-30 09:18:08
  • NoSQL数据库(三)04-Redis进阶与实战——nodejs操作redis数据库之ioredis更新属于node_redis改良版 & ioredis的可视化工具安装、基本语法、管道与事务2024-11-30 09:18:08
  • NoSQL数据库(三)03-Redis进阶与实战——EXPIRE实现服务器缓存数据 & sort实现排序之对列表类型、有序集合和非数字类型进行排序 & Redis的底层通信协议对管道提供支持2024-11-30 09:18:08
  • 全屏图片