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遍历Table应用示例
Apr 09 Javascript
JS实现点击按钮后框架内载入不同网页的方法
May 05 Javascript
一道常被人轻视的web前端常见面试题(JS)
Feb 15 Javascript
全面了解addEventListener和on的区别
Jul 14 Javascript
原生js仿jquery实现对Ajax的封装
Oct 04 Javascript
js实现砖头在页面拖拉效果
Nov 20 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
Jan 10 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
Jan 11 Javascript
微信小程序ibeacon三点定位详解
Oct 31 Javascript
ES6 class的应用实例分析
Jun 27 Javascript
构建大型 Vue.js 项目的10条建议(小结)
Nov 14 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
Oct 24 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
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
php+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
json 实例详细说明教程
2009/10/31 Javascript
Dojo 学习笔记入门篇 First Dojo Example
2009/11/15 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
JS定义网页表单提交(submit)的方法
2015/03/20 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
node.js实现为PDF添加水印的示例代码
2018/12/05 Javascript
Python pandas常用函数详解
2018/02/07 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
安装docker-compose的两种最简方法
2019/07/30 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
2019/09/26 Python
python实现智能语音天气预报
2019/12/02 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
毕业生的自我鉴定
2013/10/29 职场文书
质检部部长职责
2013/12/16 职场文书
运动会表扬稿大全
2014/01/16 职场文书
开学典礼决心书
2014/03/11 职场文书
主持人开幕词
2015/01/29 职场文书
生活小常识广播稿
2015/08/19 职场文书
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python
欧元符号 €
2022/02/17 杂记
Android中View.post和Handler.post的关系
2022/06/05 Java/Android