koa2实现登录注册功能的示例代码


Posted in Javascript onDecember 03, 2018

本文介绍了koa2实现登录注册功能的示例代码,分享给大家,具体如下:

这个主要结合前几天的内容,做个实际案例的效果

版本:

koa2实现登录注册功能的示例代码

项目结构:

koa2实现登录注册功能的示例代码

前几天,我们把注册和登录的页面demo实现了,今天我们主要实现这么几个内容

  • 注册新用户
  • 判断该邮箱是否注册过
  • 登录判断是否注册过
  • 登录时的密码的正确

本文代码地址:https://github.com/xiaqijian/koa2-lessons/tree/master/lesson6

明天,我们将利用session实现登录状态判断

今天的这篇是在之前的代码基础上添加的,我们就晒主要的代码

1.编辑user.js

// db/user.js
const mongoose = require('./db')
const Schema = mongoose.Schema;

const ceshiSchema = new Schema({
 email: String,
 name: String,
 password: String
});

const MyModel = mongoose.model('User', ceshiSchema);


class Userdb {
 constructor () {

 }
// 查询
 query (obj = {}) {
  return new Promise((resolve, reject) => {
  MyModel.find(obj, (err, res) => {
   if(err) {
   reject(err)
   }
   resolve(res)
  })
  })
 }
queryEmail (em) {
 return new Promise((resolve, reject) => {
  MyModel.find({email: em}, (err, res) => {
  if(err) {
   reject(err)
  }
  const len = res.length
  if(len >= 1){
   // 存在
   resolve(res)
  }else {
   // 不存在
   resolve(null)
  }
  })
 })
}
// 保存
 save (obj) {
  const m = new MyModel(obj)
  return new Promise((resolve, reject)=> {
  m.save((err, res) => {
   if (err) {
   reject(err)
   }
   resolve(res)
   console.log(res)
  })
  })
  
 }
}
module.exports = new Userdb()

上面主要查询用户,和保存用户

2.编辑 登录注册路由

// router/index.js

const Router = require('koa-router')


// 
const User = require('../db/user')
const home = new Router()

home.get('/', async (ctx) => {
 let title = '首页'
 await ctx.render('index', {
  title
 })
})


// 子路由2
const page = new Router()

page.get('/404', async (ctx) => {
 let title = "404"
 await ctx.render('err', {
  title
 })
})


const login = new Router()

login.get('/', async (ctx) => {
 let title = "登录"
 await ctx.render('login', {
  title
 })
}).post('/', async (ctx) => {
 const data = ctx.request.body
 let queryres = await User.queryEmail(data.email)
 console.log(queryres)
 if (queryres) {
  if(queryres[0].password === data.password) {
   ctx.body = {
    'code': 1,
    'data': queryres[0],
    'mesg': '登录成功'
   }
  }else {
   ctx.body = {
    'code': 0,
    'data': {},
    'mesg': '密码错误'
   }
  }
  
 }else {
  ctx.body = {
   'code': 0,
   'data': {},
   'mesg': '没有该用户,去注册吧'
  }
 }
})

const register = new Router()

register.get('/', async (ctx) => {
 let title = "注册"
 await ctx.render('register', {
  title
 })
}).post('/', async (ctx) => {
 const data = ctx.request.body
 let queryres = await User.queryEmail(data.email)
 if (queryres) {
  ctx.body = {
   'code': 0,
   'data': {},
   'mesg': '该邮箱已经存在哦'
  }
 }else {
  await User.save(data)
  ctx.body = {
   'code': 1,
   'data': {},
   'mesg': '保存成功'
  }
 }
 
})

// 装载所有子路由
let router = new Router()
router.use('/', home.routes(), home.allowedMethods())
router.use('/page', page.routes(), page.allowedMethods())
router.use('/login', login.routes(), login.allowedMethods())
router.use('/register', register.routes(), register.allowedMethods())


module.exports = router

3.编辑index.js

const Koa = require('koa')
const views = require('koa-views')
const statics = require('koa-static')
const bodyparser = require('koa-bodyparser')
const path = require('path')
const router = require('./router')
const app = new Koa()

const staticPath = './static'

app.use(statics(
 path.join(__dirname, staticPath)
))
app.use(bodyparser())

// 加载模板引擎
app.use(views(path.join(__dirname, './views'), {
 extension: 'ejs'
 }))

// 加载路由中间件
app.use(router.routes()).use(router.allowedMethods())

app.listen(3000, () => {
 console.log('localhost:3000')
})

这个和之前的内容增加了koa-bodyparser对post数据的解析,利用ctx.request.body获取

4.启动服务

node index.js

打开浏览器localhost:3000

尝试去登录注册一下,打开控制台,就可以看得到相关后台返回的数据

koa2实现登录注册功能的示例代码

koa2实现登录注册功能的示例代码

本文结束,下次文章利用session对登录状态的判断

本文代码地址:https://github.com/xiaqijian/koa2-lessons/tree/master/lesson6

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
幻宇的层模拟窗口效果-提供演示和下载
Jan 20 Javascript
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
Nov 03 Javascript
基于jquery封装的一个js分页
Nov 15 Javascript
浅析Node.js查找字符串功能
Sep 03 Javascript
ionic 上拉菜单(ActionSheet)实例代码
Jun 06 Javascript
玩转JavaScript OOP - 类的实现详解
Jun 08 Javascript
Vue.js每天必学之组件与组件间的通信
Sep 08 Javascript
JS实现上传图片的三种方法并实现预览图片功能
Jul 14 Javascript
jQuery代码优化方法总结
Jan 29 jQuery
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
Jan 09 Javascript
js事件触发操作实例分析
Jun 21 Javascript
js实现拖拽与碰撞检测
Sep 18 Javascript
react-router 路由切换动画的实现示例
Dec 03 #Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
Dec 03 #Javascript
ng-zorro-antd 入门初体验
Dec 03 #Javascript
如何使用 vue + d3 画一棵树
Dec 03 #Javascript
Vue.js中 v-model 指令的修饰符详解
Dec 03 #Javascript
浅谈ng-zorro使用心得
Dec 03 #Javascript
JS跨域请求的问题解析
Dec 03 #Javascript
You might like
基于CI框架的微信网页授权库示例
2016/11/25 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
js中的referrer返回上一页使用介绍
2013/09/26 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
详解AngularJS 过滤器的使用
2018/06/02 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
python 排列组合之itertools
2013/03/20 Python
Python写的贪吃蛇游戏例子
2014/06/16 Python
Python编程生成随机用户名及密码的方法示例
2017/05/05 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
台湾旅游网站:灿星旅游
2018/10/11 全球购物
太太口服液广告词
2014/03/20 职场文书
婚宴父亲致辞
2015/07/27 职场文书
小学体育教学随笔
2015/08/14 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
Redis实现短信验证码登录的示例代码
2022/06/14 Redis
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android