nyx_server
Version:
Node内容发布
95 lines (83 loc) • 3.89 kB
JavaScript
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];
}
}