UNPKG

apim-tools

Version:

APIM Tools

151 lines (129 loc) 3.55 kB
/** * @file 工具方法 * @author sparklewhy@gmail.com */ 'use strict'; /** * 将 哈希对象 转成数组结构 * * @param {Object} obj 要转换的数据对象 * @param {string=} keyFieldName 哈希对象的 key 转换后在数组数据项里的域名称,未提供则丢弃该信息 * @return {Array.<Object>} */ exports.obj2arr = function (obj, keyFieldName) { let arr = []; Object.keys(obj).forEach(key => { let item = {}; keyFieldName && (item[keyFieldName] = key); let value = obj[key]; item = Object.assign(item, value); arr.push(item); }); return arr; }; /** * 查找包含给定属性名的属性值的数组元素索引,没找到,返回 -1 * * @param {Array.<Object>} arr 要查找的数组 * @param {string} attrName 查找的属性名 * @param {*} value 要满足的属性值 * @return {number} */ exports.findByAttribute = function (arr, attrName, value) { let found = -1; arr.some((item, index) => { if (item[attrName] === value) { found = index; return true; } }); return found; }; /** * 格式化给定的字符串 * * @param {string} tpl 模板字符串 * @param {Object} data 渲染的模板数据 * @return {string} */ exports.formatString = function (tpl, data) { return tpl.replace(/\$\{(.*)\}/g, (match, key) => { let value = data[key]; if (value == null) { return ''; } return value.toString(); }); }; /** * 判断当前请求是否是页面访问 * * @param {Object} req 请求对象 * @return {boolean} */ exports.isPageVisit = function (req) { let accept = req.headers.accept; return accept && /(^|,)text\/html(,|$)/i.test(accept); }; /** * 获取本机的 IPv4 地址 * * @return {string} */ exports.getIP = function () { let ifaces = require('os').networkInterfaces(); let defultAddress = '127.0.0.1'; let ip = defultAddress; function x(details) { if (ip === defultAddress && details.family === 'IPv4') { ip = details.address; } } Object.keys(ifaces).forEach(dev => { ifaces[dev].forEach(x); }); return ip; }; exports.promisify = function (func, context) { return function (...args) { context || (context = this); return new Promise(function (resolve, reject) { let callback = function (err, ...values) { if (err) { reject(err); } else { resolve(values.length > 1 ? values : values[0]); } }; func.apply(context, [].concat(args, callback)); }); }; }; exports.normalizeUrl = function (url) { return url.replace(/\\/g, '/') .replace(/\/+/g, '/') .replace(/^(https?:\/)/, '$1/'); }; /** * 获取闭合元素匹配的正则 * * @param {string} tag 元素 tag 名称 * @return {RegExp} */ exports.getCloseElementRegexp = function (tag) { let closeElem = '<\\s*\/\\s*' + tag + '\\s*>'; let regexpStr = closeElem + '(?![\\s\\S]*' + closeElem + ')'; return new RegExp(regexpStr, 'i'); }; /** * 判断当前请求是否是 静态 JS 资源文件 * * @param {string} method 请求的方法 * @param {string} pathname 请求路径名 * @return {boolean} */ exports.isRequestJSFile = function (method, pathname) { return method === 'get' && /\.js$/i.test(pathname); }; Object.assign(exports, require('./helper/file'));