koa学习

一、搭建本地服务器

(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

十四、个人信息接口模型设计

十五、验证个人信息必填项

十六、更多方式获得个人信息

十七、添加工作和教育经历

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值