❤ 项目源码 ❤
GitHub地址:https://github.com/Umbrella001/mtapp
文章目录
一、server文件夹设计
1.1 开始配置数据库mongodb和对象模型管理工具mongoose:
1.2 在配置一些相对的登陆注册用到的接口:
二、mongodb数据库、Redis服务、smtp邮箱服务
2.1 开始如何配置一个mongodb/redis/smtp的基础配置config.js
:
① 配置连接mongodb的主机号和端口
② 配置redis主机号和端口
② 配置一下腾讯邮箱接口host及smtp服务接口,拿注册验证码:
直达路径: 登陆qq邮箱 === 设置 === 账户 === pop3…那栏
默认开启服务中都是关闭的,需要启动前两个主要实现项目服务也可以操作邮箱的功能,最后拿到授权码
/**
* describe: 数据库mongodb、redis服务、smtp邮箱服务基本配置
* author: umbrella
* date: 2019-6-28
* --------------------说明------------------------
* 导出一个对象export default即为配置mongodb的
* --连接默认mongondb(默认端口27017)/{数据库名称}
* --配置redis设置只读host(当前主机号)|| 只读端口6379(默认不要乱改)
* --配置smtp邮箱服务,固定host(stmp.qq.com)|| 开启pop功能的对应邮箱 || 填写功能授权码pass
* 模拟随机码code方法 || 验证码有效时间expire
*/
export default {
dbs: 'mongodb://127.0.0.1:27017/mtapp',
redis:{
get host(){
return '127.0.0.1'
},
get port(){
return 6379
}
},
smtp:{
get host(){
return 'stmp.qq.com' // 验证的邮箱服务smtp
},
get user(){
return '2043278154@qq.com' // 发送验证的邮箱
},
get pass(){
return 'hrhypacrzilkedai' // 授权码
},
get code(){
return ()=>{
return Math.random().toString(16).slice(2,6).toUpperCase(); // 生成一个16进制的4位大写验证码
}
},
get expire(){
return ()=>{
return new Date().getTime()+60*60*1000 // 可设置为 1h 或者 1min 自定
}
}
}
}
2.2 开始写关于用户登陆注册登出验证的接口:
三、mongoose用户模型配置
当前安装的版本:
- mongoose@5.3.0
/**
* descripe: 创建mongoose数据库模型面板,并配置必须的库类型
* author: umbrella
* date: 2018-6-28PM16:42:26
* -------------------说明------------------
* --导入所需的moogoose模型包
* --定义Schema模型,每一个schema对应一个mongoDB collection 并且在那个collection里面定义了documents的模型
* --填写模型所需要的表结构
* --导出mongoose模型UserSchema
*/
import mongoose from 'mongoose'
const Schema = mongoose.Schema
const UserSchema = new Schema({
username:{
type: String,
unique: true,
require: true
},
password:{
type: String,
require: true
},
email:{
type: String,
require: true
}
})
export default mongoose.model('User',UserSchema)
四、实现接口interface的users.js
引入的包及版本:
- koa-router @7.4.0
- koa-redis @3.1.2
- nodemailer @4.6.8
五、配置axios基础配置
安装版本:
- axios @0.18.0
官网参考:http://www.axios-js.com/zh-cn/
/**
* descripe: 封装前后端通信axios配置
* author: umbrella
* date: 018-6-28PM17:24:28
* ---------------说明----------------
* --导入所需的axios包,创建axios实例
* --配置基础的URL,请求超时timeout,及公共头部headers
* --参考文档:http://www.axios-js.com/docs/#Creating-an-instance
* --导出该axios接口实例instance
*/
import axios from 'axios'
const instance = axios.create({
baseURL: `http://${process.env.HOST||'loclhost'}:${process.env.PORT||3000}`,
timeout: 1000,
headers:{}
})
export default instance
六、配置passport相关配置
安装所需要的导包:
- koa-passport ^4.1.1
- passport-local ^1.0.0
/**
* descripe: 配置相关的passpost
* author: umbrella
* date: 018-6-28PM19:44:18
* ---------------说明----------------
* --导包passport 适用于koa的passport实现路由进入前登陆验证 || 同理适用于koa的Local策略包 ||
* 导入mongoose模型
* --参考passport官网:http://www.passportjs.org/
* --使用本地策略LocalStrategy实现简单的登陆查询,注册添加的校验
* --参数说明 username用户输入的账户名 || password用户输入的密码 || done回调函数
* --导出passport
*/
import passport from 'koa-passport'
import LocalStrategy from 'passport-local'
import UserModel from '../../dbs/models/users'
passport.use(new LocalStrategy(async function(username,password,done){
// 使用koa特色的异步async和await完成校验
let where = {
username
};
// 在数据库mongoose模型中查询username用户名
let result = await UserModel.findOne(where)
if(result!=null){
// 用户名存在时,检查数据库存储的密码是否一致
if(result.password===password){
return done(null,result)
}else{
return done(null,false,'密码错误')
}
}else{
return done(null,false,'用户名不存在')
}
}))
// 用户每次登陆成功时,将数据存储进筛选中,然后通过筛选读取用户对象序列化及反序列化
passport.serializeUser(function(user,done){
done(null,user)
})
passport.deserializeUser(function(user,done){
return done(null,user)
})
export default passport
七、定义注册、登录、发送验证码、登出、获取用户信息五个接口
安装需要的包及版本号:
- koa-router ^7.4.0
- koa-redis ^3.1.3
- nodemailer ^4.6.8
需要用到的配置:User
passport
axios
Email
↓ 配置一下当前接口的公共路径/users
,因此这五个接口的前缀都必须要有这个路径拼接
↓ 拿到Redis的存储服务容器,这里储存用户
↓ 配置所需的接口router
↓ 导出router
八、最后将写好的路由加到sever启动文件内index.js
导入相关的包:
- mongoose
- bodyParser 处理axios中的post请求所需的参数,如果没有引入post所需的参数就拿不到
- session 项目登录注册用配合koa拿session,而不是用cookie
- Redis
- json 主要是美化一下服务端向客户端发送data的输出格式
配置session相关
→ 配置session存储方式权限
app.keys = ['mt','keyskeys'] // 配置keys两个值,一个是项目的缩写,另外一个是密钥
app.proxy = true // 允许跨域
app.use(session({key: 'mt',prefix: 'mt:uid', store: new Redis()})) // 给加key值,加前缀好识别,在开启在Redis的储存权限
配置post的相关处理
→ 扩展post的参数获取类型,并使用json库美化一下
app.use(bodyParser({extendTypes:['json','form','text']}))
app.use(json())
将模型对象mongoose真正的连接数据库mongodb
→ 官方配置,dbconfig.dbs就是config.js中配置的数据库url
mongoose.connect(dbConfig.dbs,{
useNewUrlParser: true
})
配置passport相关
→ 初始化passport并且开启passport的session对接功能
app.use(passport.initialize())
app.use(passport.session())
使用路由routes
→ 这里的写法可以参考: https://www.jianshu.com/p/fef91266a44c
app.use(users.routes()).use(users.allowedMethods())
九、启动redis服务和数据库mongodb
开两个cmd:
在redis安装目录中启动cmd输入:redis-server
出现这个说明启动成功并且以连接端口
在mongodb中启动cmd输入:mongod
报错处理…code100看写的这篇博客:
https://blog.csdn.net/Umbrella_Um/article/details/99662011
成功后的图显示这个,此时访问http:127.0.0.1:27017/是可以出现博客中的校验那部分的
十、启动服务npm run dev
成功启动即可
❤ 项目源码 ❤
GitHub地址:https://github.com/Umbrella001/mtapp