nyx_server
Version:
Node内容发布
253 lines (219 loc) • 9.22 kB
JavaScript
/* 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;