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 相关文章推荐
JS去除右边逗号的简单方法
Jul 03 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
Apr 02 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
微信小程序 SocketIO 实例讲解
Oct 13 Javascript
Bootstrap table使用方法总结
May 10 Javascript
vue2.0中goods选购栏滚动算法的实现代码
May 17 Javascript
基于vue实现swipe分页组件实例
May 25 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
Jun 04 Javascript
JS实现移动端点击按钮复制文本内容
Jul 28 Javascript
Vue封装全局过滤器Filters的步骤
Sep 16 Javascript
vue 虚拟DOM的原理
Oct 03 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
Nov 05 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
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
静态html文件执行php语句的方法(推荐)
2016/11/21 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
jquery实现点击消失的代码
2014/03/03 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
重学JS 系列:聊聊继承(推荐)
2019/04/11 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
vue调用本地摄像头实现拍照功能
2020/08/14 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
Python操作MySQL简单实现方法
2015/01/26 Python
基于Python实现文件大小输出
2016/01/11 Python
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
python 同时运行多个程序的实例
2019/01/07 Python
Django接收自定义http header过程详解
2019/08/23 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
北京导游词
2015/02/12 职场文书
消防演习感想
2015/08/10 职场文书
mysql序号rownum行号实现方式
2022/12/24 MySQL