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实现等比例缩放图片效果插件
Jul 24 Javascript
chrome原生方法之数组
Nov 30 Javascript
offsetHeight在OnLoad中获取为0的现象
Jul 22 Javascript
设置checkbox为只读(readOnly)的两种方式
Oct 11 Javascript
JS数组的赋值介绍
Mar 10 Javascript
JavaScript基础语法、dom操作树及document对象
Dec 02 Javascript
jQuery Validate初步体验(一)
Dec 12 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
May 16 Javascript
Bootstrap标签页(Tab)插件使用方法
Mar 21 Javascript
jQuery加密密码到cookie的实现代码
Apr 18 jQuery
vue jsx 使用指南及vue.js 使用jsx语法的方法
Nov 11 Javascript
JS中==、===你分清楚了吗
Mar 04 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分页示例代码
2007/03/19 PHP
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
JavaScript的public、private和privileged模式
2009/12/28 Javascript
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
ext combobox动态加载数据库数据(附前后台)
2014/06/17 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
js简单实现点击左右运动的方法
2015/04/10 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
2020/02/09 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
js数组的基本使用总结
2021/01/18 Javascript
Python实现把回车符\r\n转换成\n
2015/04/23 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
对Python中plt的画图函数详解
2018/11/07 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
Django中提示消息messages的设置方式
2019/11/15 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
python实现拼图小游戏
2020/02/22 Python
利用python生成照片墙的示例代码
2020/04/09 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
竞聘上岗演讲稿范文
2014/01/10 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
Golang并发工具Singleflight
2022/05/06 Golang