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的仿flash的广告轮播
Nov 05 Javascript
JavaScript游戏之优化篇
Nov 08 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
Aug 28 Javascript
jquery及原生js获取select下拉框选中的值示例
Oct 25 Javascript
JQuery动画animate的stop方法使用详解
May 09 Javascript
javascript中Math.random()使用详解
Apr 15 Javascript
js基于cookie记录来宾姓名的方法
Jul 19 Javascript
最细致的vue.js基础语法 值得收藏!
Nov 03 Javascript
js原生之焦点图转换加定时器实例
Dec 12 Javascript
微信小程序 密码输入(源码下载)
Jun 27 Javascript
微信小程序class封装http代码实例
Aug 24 Javascript
JS动态显示倒计时效果
Dec 12 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计算多维数组中所有值总和的方法
2015/06/24 PHP
深入理解PHP变量的值类型和引用类型
2015/10/21 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
laravel实现简单用户权限的示例代码
2019/05/28 PHP
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
[00:26]TI7不朽珍藏III——冥界亚龙不朽展示
2017/07/15 DOTA
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
Python 处理文件的几种方式
2019/08/23 Python
Python连接Impala实现步骤解析
2020/08/04 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
公务员转正鉴定材料
2014/02/11 职场文书
程序员求职信
2014/04/16 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
2014公司年终工作总结
2014/12/19 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
人与自然观后感
2015/06/16 职场文书
导游词之江西赣州
2019/10/15 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js
部分武汉产收音机展览
2022/04/07 无线电