koa2實現(xiàn)登錄注冊功能的示例代碼
本文介紹了koa2實現(xiàn)登錄注冊功能的示例代碼,分享給大家,具體如下:
這個主要結(jié)合前幾天的內(nèi)容,做個實際案例的效果
版本:

項目結(jié)構:

前幾天,我們把注冊和登錄的頁面demo實現(xiàn)了,今天我們主要實現(xiàn)這么幾個內(nèi)容
- 注冊新用戶
- 判斷該郵箱是否注冊過
- 登錄判斷是否注冊過
- 登錄時的密碼的正確
本文代碼地址:https://github.com/xiaqijian/koa2-lessons/tree/master/lesson6
明天,我們將利用session實現(xiàn)登錄狀態(tài)判斷
今天的這篇是在之前的代碼基礎上添加的,我們就曬主要的代碼
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': '該郵箱已經(jīng)存在哦'
}
}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')
})
這個和之前的內(nèi)容增加了koa-bodyparser對post數(shù)據(jù)的解析,利用ctx.request.body獲取
4.啟動服務
node index.js
打開瀏覽器localhost:3000
嘗試去登錄注冊一下,打開控制臺,就可以看得到相關后臺返回的數(shù)據(jù)


本文結(jié)束,下次文章利用session對登錄狀態(tài)的判斷
本文代碼地址:https://github.com/xiaqijian/koa2-lessons/tree/master/lesson6
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
利用Node.js和MySQL實現(xiàn)創(chuàng)建API服務器
這篇文章主要為大家詳細介紹了如何使用Node.js和MySQL創(chuàng)建API服務器的步驟,這也是從前端邁向全棧的一個開始,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下2024-01-01
mongodb初始化并使用node.js實現(xiàn)mongodb操作封裝方法
這篇文章主要介紹了mongodb初始化并使用node.js實現(xiàn)mongodb操作封裝方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04
使用node-canvas在服務端渲染echarts圖表解析
這篇文章主要介紹了使用node-canvas在服務端渲染echarts圖表解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10

