# 后台服务koa2

# node

npm init --yes

# 监听模式

全局安装

cnpm install -g nodemon

# koa框架

koa-router

koa-sessin

session 是另一种记录客户状态的机制, 不同的是cookie保存在客户端的浏览器中,而session保存在服务器上

koa-static

cnpm install koa --save

//功能齐全的koa正文解析器中间件
cnpm install koa-body --save

cnpm install koa-router --save

cnpm install koa-sessin --save

//处理静态资源
cnpm install koa-static  --save

# 数据库

cnpm install mysql --save

# 请求(Request)

cnpm install request --save

cnpm install request-promise --save

官网

# jsonwebtoken(token)

# 生成token

这里注册了个 /login 的路由,用于用户登录时获取token

const router = require('koa-router')();
const jwt = require('jsonwebtoken');
const userModel = require('../models/userModel.js');
router.post('/login', async (ctx) => {
	const data = ctx.request.body;
	const result = await userModel.findOne({
		name: data.name,
		password: data.password
	})
	if(result !== null){
		const token = jwt.sign({
			name: result.name,
			_id: result._id
		}, 'my_token', { expiresIn: '2h' });
		return ctx.body = {
			code: '000001',
			data: token,
			msg: '登录成功'
		}
	}
});
module.exports = router;

# 获取token

请求成功之后拿到 token 保存到 localStorage 中

axios.post('/login', {
		name: this.username,
		password: this.password
	}).then(res => {
		if(res.code === '000001'){
			localStorage.setItem('token', res.data);
			localStorage.setItem('token_exp', new Date().getTime());
			this.$router.push('/');
		}
	})

然后请求服务器端API的时候,把 token 带在请求头中传给服务器进行验证。每次请求都要获取 localStorage 中的 token,这样很麻烦,这里使用了 axios 的请求拦截器,对每次请求都进行了取 token 放到 headers 中的操作

axios.interceptors.request.use(config => {
    const token = localStorage.getItem('token');
    config.headers.common['Authorization'] = 'Bearer ' + token;
    return config;
})

# 验证token

通过 koa-jwt 中间件来进行验证,用法也非常简单

const koa = require('koa');
const koajwt = require('koa-jwt');
const app = new koa();
// 错误处理
app.use((ctx, next) => {
    return next().catch((err) => {
        if(err.status === 401){
            ctx.status = 401;
      		ctx.body = 'Protected resource, use Authorization header to get access\n';
        }else{
            throw err;
        }
    })
})
app.use(koajwt({
	secret: 'my_token'
}).unless({
	path: [/\/user\/login/]
}));

# 解析koa-jwt

我们上面使用 jsonwebtoken 的 sign() 方法来生成 token 的,那么 koa-jwt 做了些什么帮我们来验证 token。

module.exports = function resolveAuthorizationHeader(ctx, opts) {
    if (!ctx.header || !ctx.header.authorization) {
        return;
    }
    const parts = ctx.header.authorization.split(' ');
    if (parts.length === 2) {
        const scheme = parts[0];
        const credentials = parts[1];
        if (/^Bearer$/i.test(scheme)) {
            return credentials;
        }
    }
    if (!opts.passthrough) {
        ctx.throw(401, 'Bad Authorization header format. Format is "Authorization: Bearer <token>"');
    }
};

网址

# 英语

getAllProduct  获得所有产品
getPromoProduct 获得促销产品
getHotProduct  获得热门产品
getProductByCategory 获得热门产品按类别
getCategory  获取类别
getProductBySearch  获得产品搜索
getDetails  获取详细信息
getDetailsPicture    获取详细图片

# 数据库英语

carousel  旋转木马  轮播图
category  类别
collect   收集
orders   订购
product 产品
product_picture  产品图片
shoppingcart 购物车
users  用户

地址