UNPKG

nyx_server

Version:

Node内容发布

253 lines (219 loc) 9.22 kB
/* global global */ var express = require('express'); var templateRouter = express.Router(); var Log = require('../core/log'); var Promise = require("bluebird"); var _ = require("lodash"); var isDev = global.nxyConfig.isDev; var templateFn = require('../core/Template'); var cache = require("../core/Cache").cache; function parseFileName(fileName) { var parts = fileName.split('.')[0].split("_"); var dataId = parts[0]; //数据id var type = parts[1]; //模板类型 var device = parts[2] || "pc"; //设备类型 var extra = parts[3]; //扩展标示参数 var pindex = parts[4] || 0; //分页号 return { 'fileType': type, 'device': device, 'dataId': dataId, 'extra': extra, "pindex": pindex }; } /** * 模板预览 * @param path 栏目路径 * @param filename 文件名称 文件名称,用来识别模板的类型, 如果filename 匹配 (id_type_device_extend_pindex.html <br/> * type描述了是模板类型,type为data则是数据类型模板,id是数据类型模板的待显示数据 */ templateRouter.get('/preview/:path/:filename', function (req, res) { var context = req.NyxReqContext; var columnPath = req.params.path; var fileName = req.params.filename; //获取匹配的模板所在的项目 var logger = context.log; logger.info('Router 模板预览模式开始'); var params = parseFileName(fileName); var requestInfo = {}; requestInfo.path = columnPath; //匹配路径, 栏目id requestInfo.mode = "preview"; //浏览方式 requestInfo.params = params; //请求参数 requestInfo.fileName = fileName; //原始文件名 templateFn.preview.bind(context)(requestInfo).then(function (content) { logger.info('Router 模板预览模式结束'); res.end(content); }).catch(function (err) { logger.error(err); logger.info('Router 模板预览模式异常结束'); res.end(res.end(JSON.stringify({ result: false, err: err.message }))); }); }); var inject_snippet = function(content) { const sHead = ` <script type="text/javascript" id="__edit_head_script__"> document.write('<script src="http://HOST/visual/js/lib/jquery-2.0.3.js"><\\\/script>'.replace("HOST", location.host)); document.write('<script>var topicJquery = jQuery.noConflict(true);<\\\/script>'); document.write('<link rel="stylesheet" href="http://HOST/visual/css/fragment.css">'.replace("HOST", location.host)); document.write('<link rel="stylesheet" href="http://HOST/visual/css/dialog.css">'.replace("HOST", location.host)); </script> `; const sMask = ` <nyx-div id="t-topic-mask" data-topicSystem="true"> <nyx-div data-topicSystem="true"> <nyx-span data-topicSystem="true">系统初始化中</nyx-span> </nyx-div> </nyx-div> `; const sFoot = ` <script type="text/javascript" id="__edit_foot_script__"> document.write('<script src="http://HOST/visual/js/resource.js"><\\\/script>'.replace("HOST", location.host)); </script> `; content = content.replace(/<\/body>/, function (w) { return sFoot + w; }); content = content.replace(/<body.*>/, function (w) { return w + sMask; }); content = content.replace(/<\/head>/, function (w) { return sHead + w; }); return content; }; /** * 模板编辑模式 * @param path */ templateRouter.get('/edit/:path/:filename', function (req, res) { var context = req.NyxReqContext; var columnPath = req.params.path; var fileName = req.params.filename; //获取匹配的模板所在的项目 var logger = context.log; logger.info('Router 模板编辑模式开始'); var params = parseFileName(fileName); var requestInfo = {}; requestInfo.path = columnPath; //匹配路径, 栏目id requestInfo.mode = "edit"; //浏览方式 requestInfo.params = params; //原始文件名 res.writeHead(200, { 'Content-Type': 'text/html;charset=UTF-8' }); var promise = templateFn.preview.bind(context)(requestInfo); promise.then(function (content) { logger.info('Router 模板编辑模式完成'); content = inject_snippet(content); res.end(content); }).catch(function (err) { logger.error(err); logger.info('Router 模板编辑模式异常完成'); res.end(res.end(JSON.stringify({ result: false, err: err.message }))); }); }); /** * 修改模板请求 */ templateRouter.post('/edit', function (req, res) { var context = req.NyxReqContext; var requestInfo = JSON.parse(req.body.requestInfo); var chipDataId = req.body.chip_data_id; var chipName = req.body.chipName; var nodeid = req.body.nodeid; var params = req.body.params; var chipInfo = { "chipName": chipName, "chipDataId": chipDataId, "params": params }; var logger = context.log; logger.info('Router 调用模板编辑开始'); templateFn.edit.bind(context)(requestInfo, nodeid, chipInfo).then(function (result) { logger.info('Router 调用模板编辑完成'); res.end(result + ""); }).catch(function (err) { logger.error(err); logger.info('Router 调用模板编辑异常完成'); res.end(res.end(JSON.stringify({ result: false, err: err.message }))); }); }); templateRouter.get("/ui/:uiname/:path/:filename", function (req, res) { var context = req.NyxReqContext; var columnPath = req.params.path; var fileName = req.params.filename; var uiname = req.params.uiname; var params = parseFileName(fileName); var logger = context.log; //获取匹配的模板所在的项目 logger.info('Router 调用模板UI'); res.writeHead(200, { 'Content-Type': 'text/html;charset=UTF-8' }); var requestInfo = {}; requestInfo.path = columnPath; //匹配路径, 栏目id requestInfo.params = params; templateFn.ui.bind(context)(requestInfo, uiname).then(function (content) { logger.info('Router 调用模板UI完成'); res.end(content); }).catch(function (err) { logger.error(err); logger.info('Router 调用模板UI异常完成'); res.end(res.end(JSON.stringify({ result: false, err: err.message }))); }); }); templateRouter.all("/api/:apiname/:path/:filename", function (req, res) { var context = req.NyxReqContext; var columnPath = req.params.path; var fileName = req.params.filename; var apiname = req.params.apiname; var params = parseFileName(fileName); var bodyparams = req.body; params = _.assign({} , bodyparams, params , req.query); var logger = context.log; //获取匹配的模板所在的项目 logger.info('Router 调用模板API开始'); res.writeHead(200, { 'Content-Type': 'application/json;charset=UTF-8' }); var requestInfo = {}; requestInfo.path = columnPath; //匹配路径, 栏目id requestInfo.params = params; templateFn.api.bind(context)(requestInfo, apiname).then(function (content) { logger.info('Router 调用模板API完成'); res.end(JSON.stringify(content)); }).catch(function (err) { logger.error(err); logger.info('Router 调用模板API异常完成'); res.end(res.end(JSON.stringify({ result: false, err: err.message }))); }); }); templateRouter.get('/publish/:path/:filename', function (req, res) { var context = req.NyxReqContext; var columnPath = req.params.path; var fileName = req.params.filename; var logger = context.log; logger.info('Router 模板发布开始'); var requestInfo = {}; var params = parseFileName(fileName); requestInfo.path = columnPath; //匹配路径, 栏目id requestInfo.params = params; //原始文件名 requestInfo.mode = "publish"; templateFn.publish.bind(context)(requestInfo).then(function () { logger.info('Router 模板发布完成'); res.end(JSON.stringify({ result: true })); }).catch(function (err) { logger.error(err); logger.info('Router 模板发布异常完成'); res.end(JSON.stringify({ result: false, err: err.message })); }); }); templateRouter.get('/offline/:path/:filename', function (req, res) { var context = req.NyxReqContext; var columnPath = req.params.path; var fileName = req.params.filename; var logger = context.log; logger.info('Router 模板下线开始'); var requestInfo = {}; var params = parseFileName(fileName); requestInfo.path = columnPath; //匹配路径, 栏目id requestInfo.params = params; //原始文件名 requestInfo.mode = "offline"; templateFn.offline.bind(context)(requestInfo).then(function () { logger.info('Router 模板下线完成'); res.end(JSON.stringify({ result: true })); }).catch(function (err) { logger.error(err); logger.info('Router 模板下线异常完成'); res.end(JSON.stringify({ result: false, err: err.message })); }); }); module.exports = templateRouter;