UNPKG

nyx_server

Version:

Node内容发布

95 lines (83 loc) 3.89 kB
var Log = require('../log'); var cache = require("../Cache").cache; var templateLoader = require("../TemplateLoader"); var _ = require("lodash"); var path = require("path"); module.exports = function () { return function (req, res, next) { try { var reqPath = req.path; var logger = Log.getLogger(reqPath); var session = req.session; var context = { log: logger, cache: cache, user: session.userinfo }; req.NyxReqContext = context; var project = null; var wrapPromise = null; if (/\/project\//.test(reqPath)) { var projectName = /\/project\/api\/([^\/]*)/.exec(reqPath)[1]; wrapPromise = Promise.resolve(projectName); } else if (/\/template\//.test(reqPath)) { //如果模板是发布则会出现多个项目发布的情况 /template/preview|publish|edit| var operation = /\/template\/([^\/]*)/.exec(reqPath)[1]; /////publish|preview|edit|ui var columnPath = getMatchPath(reqPath, operation); var fileName = path.basename(reqPath, path.extname(reqPath)); var requestInfo = {}; requestInfo.path = columnPath; //匹配路径, 栏目id requestInfo.params = parseFileName(fileName); //原始文件名 if (operation == "publish") { wrapPromise = templateLoader.loaderTemplateWithPath(columnPath).then(function (templates) { return _.map(templates, function (t) { return t._ownerProject.config.name; }) }); } else { wrapPromise = templateLoader.loaderTemplate(requestInfo).then(function (template) { return template._ownerProject.config.name; }); } } else if (/\/chip\//.test(path)) { var operation = /\/chip\/([^\/]*)/.exec(reqPath)[1]; var projectName = ""; if (operation == "preview" || operation == "publish") { projectName = /\/chip\/(?:preview|publish)\/([^\/]*)/.exec(reqPath)[1].split(".")[0]; } else if (operation == "ui" || operation == "api") { projectName = /\/chip\/(?:api|ui)\/[^\/]*\/([^\/]*)/.exec(reqPath)[1].split(".")[0]; } wrapPromise = Promise.resolve(projectName); } else { wrapPromise = Promise.resolve("Nyx"); } wrapPromise.then(function (projectNames) { var logger = Log.getLogger(reqPath , projectNames||"Nyx"); req.NyxReqContext.log = logger; next(); }).catch(function () { next(); }) } catch (err) { console.log(err.stack) next(); } } } 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 } } function getMatchPath(reqPath, operation) { if (operation == "preview" || operation == "publish" || operation == "offline" || operation == "edit") { return /\/template\/(?:preview|publish|offline|edit)\/([^\/]*)/.exec(reqPath)[1]; } else if (operation == "ui" || operation == "api") { return /\/template\/(?:api|ui)\/[^\/]*\/([^\/]*)/.exec(reqPath)[1]; } }