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 相关文章推荐
jquery三个关闭弹出层的小示例
Nov 05 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
Apr 08 Javascript
jquery显示loading图片直到网页加载完成的方法
Jun 25 Javascript
javascript实现数字倒计时特效
Mar 30 Javascript
React.js入门实例教程之创建hello world 的5种方式
May 11 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
Sep 03 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
Jun 08 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
Jul 05 Javascript
关于js中的鼠标事件总结
Jul 11 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
Mar 28 Javascript
使用vue开发移动端管理后台的注意事项
Mar 07 Javascript
用vue 实现手机触屏滑动功能
May 28 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
php数组应用之比较两个时间的相减排序
2008/08/18 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
thinkPHP简单实现多个子查询语句的方法
2016/12/05 PHP
使用jQuery和PHP实现类似360功能开关效果
2014/02/12 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
javascript每日必学之运算符
2016/02/16 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
JavaScript 面向对象基础简单示例
2019/10/02 Javascript
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
跟老齐学Python之网站的结构
2014/10/24 Python
python查找目录下指定扩展名的文件实例
2015/04/01 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
python安装教程
2018/02/28 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
Python脚本导出为exe程序的方法
2020/03/25 Python
python打开文件的方式有哪些
2020/06/29 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
机电专业毕业生求职信
2013/10/27 职场文书
矫正人员思想汇报
2014/01/08 职场文书
化妆品促销方案
2014/02/24 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
docker 制作mysql镜像并自动安装
2022/05/20 Servers