UNPKG

isv-page-json-to-xtpl

Version:

abs 将页面 json 转换成 html

78 lines (77 loc) 2.05 kB
/** * 页面调试相关的处理逻辑 */ 'use strict'; let _ = require('lodash'); let req = require('request'); let Promise = require('bluebird'); let pageAssets = module.exports = { /** * 获取不存在的资源 * @param content 页面内容 */ noExistAssetPaths: function*(content){ let assetPaths = []; let scripts = pageAssets.getAssetsFromHtml('js',content,true); if(scripts.length){ yield Promise.map(scripts,function(script){ return pageAssets.getAssetContent(script).then(function(result){ //不存在 asset 内容 if(!result.success){ assetPaths.push(result.path); } }); }) } return assetPaths; }, /** * 从 html 中获取asset */ getAssetsFromHtml: function(type,content,openCombo){ let patt = type === 'js' && /<script[^>]+src=['"]([^'"]+)['"]+/g || /<link[^>]+href=['"]([^'"]+)['"]+/g; let temp; let assets = []; while( (temp= patt.exec(content)) != null ) { let url = temp[1]; //解开combo if(openCombo){ let aUrl = url.split('??'); //带有combo的 url if(aUrl[1]){ let modUrls = aUrl[1].split(','); _.each(modUrls,function(modUrl){ assets.push(aUrl[0].replace(/\/$/,'')+'/'+modUrl); }) }else{ assets.push(url); } }else{ assets.push(url); } } return assets; }, /** * 获取 asset 内容 * @param assetPath * @returns {*} */ getAssetContent: function(assetPath){ return new Promise(function(resolve, reject) { assetPath = assetPath.replace(/^\/\//, 'http://'); req( { url: assetPath, headers: { 'User-Agent': 'request' } }, function (error, response, body) { if (!error && response.statusCode == 200) { resolve({success:true,content:body,path:assetPath}); }else{ resolve({success:false,content:null,path:assetPath}); } }); }); } };