diff --git a/package.json b/package.json index bb4cde4..aec4445 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "express-session": "^1.16.1", "express-validator": "^5.3.1", "file-stream-rotator": "^0.4.1", + "fontmin": "^0.9.7-beta", "form-data": "^2.3.3", "fs-extra": "^8.0.0", "glob": "^7.1.4", diff --git a/src/controllers/games/mp_share.js b/src/controllers/games/mp_share.js index b297da6..b694b07 100644 --- a/src/controllers/games/mp_share.js +++ b/src/controllers/games/mp_share.js @@ -1,80 +1,82 @@ -import { Router } from 'express'; -import FormData from 'form-data'; -import request from 'request'; -import fs from 'fs'; -import path from 'path'; -import painter from '../../utils/painter'; -import config from '../../../config/config'; - -const router = new Router(); - - - +import {Router} from 'express' +import request from 'request' +import fs from 'fs' +import path from 'path' +import painter from '../../utils/painter' +import config from '../../../config/config' +import Template from '../../models/mp_share/Template' +const router = new Router() // 生成预览图 router.post('/get_pic', async (req, res, next) => { - const body = req.body; - const opt = body.opt; + const body = req.body + const opt = body.opt try { - const imgTempName = await painter(opt); - const imgTempPath = path.join(__dirname, '../../temp/' + imgTempName); + const imgTempName = await painter(opt) + const imgTempPath = path.join(__dirname, '../../temp/' + imgTempName) // 生成后上传、删除 const formData = { 'image-file': fs.createReadStream(imgTempPath), sub_path: '/mp-share/', - file_type: 'mp_share' - }; + file_type: 'mp_share', + } request.post( { url: config.host + '/api/mp_share/imgs/upload', formData: formData, headers: { - authorization: `${req.headers.authorization}` - } + authorization: `${req.headers.authorization}`, + }, }, function(uploadErr, uploadRes, uploadBody) { fs.unlink(imgTempPath, function(err) { if (err) { - console.log(err); + console.log(err) } - }); + }) if (uploadErr) { - next(uploadErr); - return; + next(uploadErr) + return } - res.send(uploadBody); + res.send(uploadBody) } - ); + ) } catch (err) { - next(err); + next(err) } -}); - +}) // 保存模板 router.post('/save_tpl', async (req, res, next) => { - + const body = req.body + const tpl = body.tpl + try { + const searchRes = await Template.findOne({tpl_id: tpl.tpl_id}) + if (searchRes) { + res.send({ + errcode: 1, + errmsg: '模板ID已存在!', + }) + return + } + tpl.createdBy = req.user.username || '' + const result = await Template.save(tpl) + res.send({ + errcode: 0, + }) + } catch (err) { + next(err) + } }) - // 修改模板 - - // 删除模板 - - // 查询单个模板 - - - // 获取模板列表 - - - -export default router; +export default router diff --git a/src/controllers/mp_share/get_font.js b/src/controllers/mp_share/get_font.js index 2e08a72..17c6cb1 100644 --- a/src/controllers/mp_share/get_font.js +++ b/src/controllers/mp_share/get_font.js @@ -1,20 +1,20 @@ import {Router} from 'express' import path from 'path' import cors from 'cors' +import Fontmin from 'fontmin' const router = new Router() const whitelist = ['https://servicewechat.com'] const corsOptions = { - origin: function (origin, callback) { + origin: function(origin, callback) { if (whitelist.indexOf(origin) !== -1) { callback(null, true) } else { callback(new Error('Not allowed by CORS')) } - } + }, } - router.get('/get_font', cors(), async (req, res, next) => { const query = req.query @@ -25,4 +25,31 @@ router.get('/get_font', cors(), async (req, res, next) => { res.download(fontPath) }) +router.get('/fontmin', cors(),async (req, res, next) => { + const query = req.query + const {text, font_name, ext} = query + console.log(text) + const fontPath = path.join(__dirname, `../../fonts/${font_name}.${ext}`) + const fontmin = new Fontmin().src(fontPath).use( + Fontmin.glyph({ + text: text, + hinting: false, + }) + ) + fontmin.run(function(err, files) { + if (err) { + console.log(err) + next(err) + return + } + const data = files[0].contents + res.writeHead(200, { + 'Content-Type': 'application/vnd.ms-fontobject', + 'Content-disposition': `attachment;filename=${font_name}.${ext}`, + 'Content-Length': data.length, + }) + res.end(data) + }) +}) + export default router diff --git a/src/models/mp_share/Template.js b/src/models/mp_share/Template.js index 6022851..5d4f80d 100644 --- a/src/models/mp_share/Template.js +++ b/src/models/mp_share/Template.js @@ -6,7 +6,7 @@ const ObjectId = Schema.Types.ObjectId; /** * 操作日志 */ -const OpLog = new mongoose.Schema({ +const Template = new mongoose.Schema({ // 游戏id tpl_name: {type: String}, tpl_id: {type: String},