一、搭建本地服务器
(1)创建项目
(2)执行npm init创建package.json文件
(3)安装依赖 cnpm install koa koa-router --save
(4)安装自动监测代码变更的工具 cnpm install -g nodemon
(5)代码示例
package.json
{
"name": "koa01",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "node app.js",
"serve": "nodemon app.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"koa": "^2.13.1",
"koa-router": "^10.1.1"
}
}
app.js
const koa = require("koa");
const Router = require("koa-router");
// 实例化koa
const app = new koa();
const router = new Router()
// 路由
router.get ('/', async ctx => {
ctx.body = {
msg: 'Hello koa Interfaces'
}
})
// 配置路由
app.use(router.routes()).use(router.allowedMethods());
const port = process.env.port || 5000;
app.listen(port, ()=>{
console.log(`server started on ${port}`)
})
二、连接mongodb数据库
安装依赖
cnpm install mongoose --save
将连接地址写在配置文件里面,./config/key.js
module.exports = {
mongoURL: "mongodb+srv://user:root@cluster0.r9bsn.mongodb.net/myFirstDatabase?retryWrites=true&w=majority"
}
// 在app.js中引入mongoose进行连接
const koa = require("koa");
const Router = require("koa-router");
const mongoose = require("mongoose")
// 实例化koa
const app = new koa();
const router = new Router()
// 路由
router.get ('/', async ctx => {
ctx.body = {
msg: 'Hello koa Interfaces a'
}
})
// config
const db = require('./config/keys').mongoURL
// 连接数据库
mongoose.connect(db,
{useNewUrlParser:true}
)
.then(()=>{
console.info('Mongodb COnnected.....');
}).catch(err => {
console.log(err);
})
// 配置路由
app.use(router.routes()).use(router.allowedMethods());
const port = process.env.port || 5000;
app.listen(port, ()=>{
console.log(`server started on ${port}`)
})
三、对路由进行模块化
创建目录routes/api/users.js
内容如下
// 关于用户的接口文件
const Router = require('koa-router');
const router = new Router();
/**
* @route GET api/users/test
* @description 测试借口地址
* @access 接口是公开的
*/
router.get("/test",async ctx => {
ctx.status = 200;
ctx.body = {
msg: 'users works...'
}
})
module.exports = router.routes()
在api.js中进行引入
const koa = require("koa");
const Router = require("koa-router");
const mongoose = require("mongoose")
// 实例化koa
const app = new koa();
const router = new Router()
// 引入 users.js
const users = require('./routes/api/users')
// 路由
router.get ('/', async ctx => {
ctx.body = {
msg: 'Hello koa Interfaces a'
}
})
// config
const db = require('./config/keys').mongoURL
// 连接数据库
mongoose.connect(db,
{useNewUrlParser:true}
)
.then(()=>{
console.info('Mongodb COnnected.....');
}).catch(err => {
console.log(err);
})
// 配置路由地址
router.use('/api/users',users)
// 配置路由
app.use(router.routes()).use(router.allowedMethods());
const port = process.env.port || 5000;
app.listen(port, ()=>{
console.log(`server started on ${port}`)
})
四、创建用户模型
创建目录及文件models/user.js
内容如下
const mongoose = require("mongoose")
const Schema = mongoose.Schema;
// 实例化数据模板
const UserSchema = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
avatar: {
type: String
},
date: {
type: Date,
default: Date.now
}
});
module.exports = User = mongoose.model("users", UserSchema);
在需要使用的路由文件routes/api/user.js里面进行引入
// 引入User
const User = require("../../models/user")
五、安装调试接口工具 postman
六、注册用户接口
(1)获得用户传过来的数据,需要安装koa-bodyparser
cnpm install koa-bodyparser --save
在app.js文件中引入并使用
var bodyParser = require("koa-bodyparser")
app.use(bodyParser())
(2)使用bcryptjs对密码进行加密
安装依赖 cnpm i bcryptjs --save
需要使用的文件中
// 引入加密依赖
const bcrypt = require('bcryptjs')
使用代码如下
router.post('/register', async ctx=> {
// console.log(ctx.request.body)
// 存储到数据库
const findResult = await User.find({
email: ctx.request.body.email
})
if (findResult.length > 0) {
console.log(findResult)
ctx.status = 500;
ctx.body = {
email: '邮箱已被占用'
}
} else {
// 没有查到
const newUser = new User({
name: ctx.request.body.name,
email: ctx.request.body.email,
password: ctx.request.body.password
})
/*await bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newUser.password, salt, (err, hash) => {
if (err) throw err;
// Store hash in your password DB.
newUser.password = hash
});
});*/
let hasPwd = bcrypt.hashSync(newUser.password, 10);
newUser.password = hasPwd
console.log(newUser)
// 存储到数据库
await newUser
.save().
then(user => {
ctx.status = 200;
ctx.body = newUser;
})
.catch(err => {
console.log(err)
})
//
ctx.body = newUser
}
//ctx.status = 200
})
七、全球公认头像的使用
安装
npm install gravatar --save
八、解决注册接口加密的问题
九、登录接口
十、生成token
安装依赖
npm install jsonwebtoken
js文件中引入 const jwt= require('jsonwebtoken')
应用如下
/**
* @route POST api/users/register
* @desc 登录接口,返回token
* @access 接口是 公开的
*/
router.post('/login', async ctx=> {
// 查询
const findResult = await User.find({
email: ctx.request.body.email
})
const user = findResult[0]
if (findResult.length > 0) {
// 查到后验证密码
const res = bcrypt.compareSync(ctx.request.body.password, findResult[0].password)
if (res) {
// 返回token
const payload = {
id: user.id,
name: user.name
}
const token = jwt.sign(payload, keys.secretOrKey, { expiresIn: 60 * 60 })
ctx.status = 200
ctx.body = {
success: true,
token: 'Bearer ' + token
}
} else {
ctx.status = 400
ctx.body = {
email: '登陆失败,用户名或密码错误'
}
}
} else {
ctx.status = 404
ctx.body = {
email: '用户不存在'
}
}
})
十一、passport验证token
安装依赖 npm i koa-passport
在app.js中引入
const passport = require('koa-passport')
app.use(passport.initialize())
app.use(passport.session())
安装依赖
npm install passport-jwt
十二、使用validator验证表单
npm i validator
十三、验证注册和登录的input
十四、个人信息接口模型设计
十五、验证个人信息必填项
十六、更多方式获得个人信息
十七、添加工作和教育经历