后台管理系统
架构示意图
前端 后台 小程序云开发
vue-admin-template <—通过 ajax–> 基于 Koa2;HTTP API 或 tcb-admin-node —->云函数、云数据库、云存储
vue-admin-template 构建管理系统前端
vue-element-admin 基于 element 的后台管理系统模板
vue-admin-template 是 vue-element-admin的简化版
使用方法查看官方文档。
Koa2 构建管理系统后端
官网: https://koa.bootcss.com/
新建空文件夹 wx-music-admin-backend,打开终端:
1 2 3 4 5 6 7 8 9
| npm init -y
npm install koa
type nul > app.js
|
app.js:
1 2 3 4 5 6 7 8 9 10 11 12
| const Koa = require("koa"); const chalk = require("chalk"); const app = new Koa();
app.use(async (ctx) => { ctx.body = "Hello Wolrd"; }); const port = 3000; app.listen(port, () => { console.log(chalk.green(`> 服务已开启,访问:http://localhost:${port}`)); });
|
终端:
接口调用凭证 access_token 的缓存与更新
access_token,微信的接口调用凭证,详情:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html
回到项目 wx-music-admin-backend,打开终端:
1 2 3
| npm i request npm i request-promise
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
const rp = require("request-promise"); const fs = require("fs"); const path = require("path");
const fileName = path.resolve(__dirname, "./access_token.json");
const APPID = "wxc4e0b2d98063b103"; const APPSECRET = "xxx";
const URL = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`;
const updateAccessToken = async () => { const resStr = await rp(URL); const res = JSON.parse(resStr);
if (res.access_token) { fs.writeFileSync( fileName, JSON.stringify({ access_token: res.access_token, createTime: new Date(), }) ); } else { await updateAccessToken(); } };
const getAccessToken = async () => { try { const readRes = fs.readFileSync(fileName, "utf8"); const readObj = JSON.parse(readRes);
const createTime = new Date(readObj.createTime).getTime(); const nowTime = new Date().getTime(); if ((nowTime - createTime) / 1000 / 60 / 60 >= 2) { await updateAccessToken(); await getAccessToken(); return; } return readObj.access_token; } catch (error) { await updateAccessToken(); await getAccessToken(); } };
setInterval(async () => { await updateAccessToken(); }, (7200 - 300) * 1000);
module.exports = getAccessToken;
|
后端代码通过 HTTP API 触发云函数获取数据
HTTP API 触发云函数
产生跨域和后端解决跨域问题
管理系统前端向管理系统后端请求数据,产生了跨域问题
管理系统后端,安装
1 2
| // 解决跨域问题的koa包 npm i koa2-cors
|
app.js
1 2 3 4 5 6 7
| app.use( cors({ origin: ["http://localhost:9528"], credentials: true, }) );
|
云数据库的增删改查接口
数据库查询记录
后端获取前端 post 请求传来的数据
get 请求可以直接通过 ctx.request.query 获取,但是 post 请求需要安装 koa-body
app.js
1 2 3 4 5 6 7 8
| const koaBody = require("koa-body");
app.use( koaBody({ multipart: true, }) );
|
接口.js
1 2 3
| router.post("/updatePlaylist", async (ctx, next) => { const params = ctx.request.body; });
|
后端获取云存储图片
云存储中上传图片,云数据库中新建图片的集合,并添加数据字段,字段包含云文件的 fileid。
后端项目通过调用云数据库的方式获取数据
1 2 3 4 5 6
| router.get("/list", async (ctx, next) => { const query = `db.collection('swiper').get()`; const res = await callCloudDB(ctx, "databasequery", query); console.log(res); });
|
但获取到的数据为 fileid,并不能用于显示图片,需要通过微信 HTTP API 获取云存储的接口来获取图片地址
获取云存储
后端上传图片到云存储
文件上传