需求

  • 使用HBuilder开发html模块, 图他的自动刷新, 但是自带的服务器只能访问静态资源, 不够灵活
  • 使用 json-server, 前端网络工具用的ajax, 不支持POST跨域
  • 配置nginx解决跨域, 本来就是图方便, 怎么还能让人点2次呢
  • 之前改造过livereload, 我觉得可以再改一次

过程

  • 通过比对HBuilder服务器启动前后的进程列表, 确定使用的是node.exe
  • 通过命令获取所有node进程的启动命令
wmic process where caption="node.exe" get caption,commandline,ProcessId
  • 找到服务器的文件为livereload.js, 后续确定是HBuilder安装目录下的livereload.js
  • livereload.js(HBuilder 2.9.8.20201110)使用的express模块
  • 接入的代理服务模块 proxyserver.js
/*
livereload.js 改造内容
. 用于解析POST的boyd, 在req.body中访问, 在其他调用app.use附近添加app.use(express.json());
. 用于拦截请求, 接入本JS进行处理, 在原有的app.get前添加app.post('*', function(req, res) {var md = require('D:\\work\\proxyserver.js');md(req, res);});
. 修改checkFunc中对文件修改的判断, 排除数据地址, 否则页面会刷新filename.indexOf('需要排除的文件夹') == -1
*/
var http = require('http');
var url = require('url');
var path = require('path');
var fs = require('fs');
/*** 清除require缓存, 模拟热更新* @param {Object} name*/
var clearModel = function(name) {if (!name) return;name = name.replace('/', '\\\\');var module = require.cache[name];if (module.parent) {module.parent.children.splice(module.parent.children.indexOf(module), 1);}delete require.cache[name];
}/*** 优先使用JS模块(.js)处理, 没有JS模块的使用JSON(.json)数据,* 并在返回之前封装外壳* @param {Object} request* @param {Object} response*/
module.exports = function(request, response) {var pathname = url.parse(request.url).pathname;/*期望的JSON文件,这里的的路径需要配合项目中实际使用的网络访问工具进行调整假设你的HBuilder中有2个项目, 一个WebApp, 一个WebApi,WebApp需要访问 ip:port/WebApi/auth/login, 那么WebApi的结构为WebApi > auth > login.js*/var jsonFile = path.join(__dirname, '../', pathname) + '.json';// 期望的JS模块文件var jsFile = path.join(__dirname, '../', pathname) + '.js';// 统一格式var respData = {"success": true,"message": "访问成功.","data": {}}if (fs.existsSync(jsFile)) { // 判断是否存在JS模块// 引入JS模块并调用var md = require(jsFile);try {respData.data = md(request, response);} catch (e) {respData.success = false;respData.message = e.message ? e.message : e;console.log(e);}// 清除引入的模块clearModel(jsFile);} else if (fs.existsSync(jsonFile)) { // 判断是否存在JSON文件// 读取文件内容并响应var data = fs.readFileSync(jsonFile, 'utf-8');try {respData.data = JSON.parse(data);} catch (e) {respData.success = false;respData.message = e.message ? e.message : e;console.log(e);}} else {// 其他情况, 响应错误信息respData.success = false;respData.message = '未找到对应的处理路径.';}// 发送数据response.json(respData)
}
  • 具体服务的模块

    • demo.js
/*** 示例* express 文档 https://www.expressjs.com.cn/4x/api.html* 首选访问 demo.js, 如果没有则访问demo.json, 否则返回false* 数据发送*   res.json 响应json*  res.jsonp 响应跨域*  res.send 发送文件或者发送json对象* @param {Object} req* @param {Object} res*/
module.exports = function(req, res) {if (req.body.type == 1) {// 直接响应jsonreturn {messag: 'this type is js'};} else if (req.body.type == 2) {// 引入其他json文件, 如果使用require加载json, 修改后不会自动刷新var data = require('fs').readFileSync(__dirname+'/demo.json', 'utf-8');return JSON.parse(data);} else { // 响应字符串return './demo.json';}
}
  • demo.json
{"messag": "this type is json"
}
  • 开发过程中, 因为不知道怎么看livereload.js的输出, 而且服务启动之后没找到停止服务的按钮, 只能暂时通过关闭HBuilder来实现关闭, 所以通过自建一个服务器测试, 没问题后再放入livereload.js中, 代码如下
// 直接引入安装目录下的express
var express=require('HBuilderX安装目录\\plugins\\nodeserver\\node_modules\\express\\index.js');// 构建 服务器
var app = express();
// 解析 POST 发送的 body, 在req.body中访问
app.use(express.json())// 仅接受POST请求
app.post('*', function(req, res) {// 调用自定义的服务模块, 内部会调用其他模块var md = require('D:\\work\\proxyserver.js');md(req, res);
});
// 监听 8489端口, 可自定义
app.listen(8489, function(){console.log('running on 84889')
})

修改HBuilder的livereload添加自定义响应模块相关推荐

  1. 基于Linux安全验证添加自定义PAM模块

    声明:本博文用于学习总结及工作心得 环境: Ubuntu 14.04 .PAM 1.2.1 ,需要root权限,以及C语言知识 首先需要了解什么是PAM: AM即可插拔认证模块.它提供了对所有服务进行 ...

  2. matlab对象浏览器模块隐,MATLAB 添加自定义的模块到simulink库浏览器

    EDA365欢迎您登录! 您需要 登录 才可以下载或查看,没有帐号?注册 x MATLAB 添加自定义的模块到simulink库浏览器' X) d- E" x' b; y" Y% ...

  3. MATLAB 添加自定义的模块到simulink库浏览器

    在MATLAB开发环境中,Simulink仿真平 台可以建立用户自定义的库文件,并将它们显示在Library Browser窗口下,方便用户进行模块的操作.用户可以将一些平时使用比较频繁,或者自己建立 ...

  4. python修改mac地址_python利用_winreg模块制作MAC地址修改工具

    通过百度搜索知道,xp下修改MAC地址的方法主要有两个,一种是通过配置本地链接属性来实现,这种方法不适合用程序来完成,另一种是通过修改注册表来完成,本程序主要是利用了这种方法. 具体方法:Window ...

  5. sqlite3修改表内容python_Python sqlite3数据库模块使用攻略

    Python作为数据科学主流语言,被广泛用于数据读存.处理.分析.建模,可以说是无所不能. 数据一般存放在本地文件或者数据库里,之前介绍过如何使用python读取本地文件,也对# PyMySQL.cx ...

  6. Fiddler改包场景04——先拦截请求,修改请求,再拦截响应,修改响应,放行响应

    场景 请求百度首页,返回163首页的页面,并且标题变为:百度一下,你就来到了网易. 思路 1,拦截百度首页的请求,改为163首页的请求,放行请求 1,获取163首页的请求消息.如何获取?--抓包获取. ...

  7. java过滤器修改响应,在过滤器中实现修改http请求体和响应体

    在一些业务场景中,需要对http的请求体和响应体做加解密的操作,如果在controller中来调用加解密函数,会增加代码的耦合度,同时也会增加调试的难度. 参考spring中http请求的链路,选择过 ...

  8. 百度商桥修改服务器,百度商桥 · 响应式网站编辑器使用手册 · 看云

    #### 百度商桥是在线客服,是数据专家,也是管理高手 官网 https://qiao.baidu.com/ >百度商桥注册开通地址 https://u.baidu.com/ucweb/?mod ...

  9. Swift 添加自定义响应事件

    一,新建一个协议(Protocol) VisitURLProtocol.swift import UIKit protocol VisitURLProtocol{func didVisitURL(ur ...

  10. 使用vscode添加自定义Python模块

    在vscode里新建一个深度学习项目,新建一个文件夹用来写公共模块,结构如下. tools #文件夹__init__.pyDataHandler.py AlexNet #文件夹trainAlex.py ...

最新文章

  1. 《自然-神经科学》发表脑智卓越中心关于昼夜节律中枢的研究成果
  2. Android 事件与事件监听器
  3. Uncaught TypeError: Cannot redefine property: $router
  4. sql游标以及异常处理
  5. Linux 使用root用户登录系统,并查看当前的路径。 查看当前目录下面的所有文件(包括隐藏文件)。 在当前目录下,查看根目录中的目录结构。
  6. ONNX系列七 --- 在Python中使用可移植的ONNX AI模型
  7. java里有哪些对象_Java中创建对象的方式有哪些
  8. Mysql 设置 max_user_connections
  9. python 搭建的http 动态服务器_Python3搭建http服务器的实现代码
  10. python中字典dictionary详解及基本使用
  11. 【AI】行为树(Behaviour Tree)
  12. 颜色,色相环知识分享
  13. 关于Spring Boot报错:LoggerFactory is not a Logback LoggerContext but Logback is on the classpath
  14. 删除桌面计算机,桌面上的图标删不掉怎么办【解决方法】
  15. PS制作马赛克效果、炫酷光线
  16. 启动nexus常见问题
  17. “十问”彻底弄懂APS、ERP、MES的集成问题
  18. re_mysql_20221210
  19. IP-guard文档透明加密——加密文件外发管理
  20. Github使用秘籍

热门文章

  1. windows下namp的基本操作命令
  2. 楼市、股市后下一届ZF将用什么去做超发货币的蓄水池(
  3. ibm java虚拟机_IBM java VM 最新版的java虚拟机下载及安装的一点说明
  4. 综合评价指标权重方法汇总
  5. 安装NVIDIA显卡驱动
  6. NC65安装手册、NC65授权教程
  7. php import mdf,excel表格怎么导入数据库数据格式转换-已有excel表格导入sql server生成*.mdf *.ldf文件......
  8. discuz内置代码
  9. 反恐精英ol永恒python厉害吗_【CS】Python高阶
  10. Android安全与隐私相关特性的行为变更分析