需求
- 使用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
var http = require('http');
var url = require('url');
var path = require('path');
var fs = require('fs');
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];
}
module.exports = function(request, response) {
var pathname = url.parse(request.url).pathname;
var jsonFile = path.join(__dirname, '../', pathname) + '.json';
var jsFile = path.join(__dirname, '../', pathname) + '.js';
var respData = {
"success": true,
"message": "访问成功.",
"data": {}
}
if (fs.existsSync(jsFile)) {
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)) {
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)
}
module.exports = function(req, res) {
if (req.body.type == 1) {
return {
messag: 'this type is js'
};
} else if (req.body.type == 2) {
var data = require('fs').readFileSync(__dirname+'/demo.json', 'utf-8');
return JSON.parse(data);
} else {
return './demo.json';
}
}
{
"messag": "this type is json"
}
- 开发过程中, 因为不知道怎么看livereload.js的输出, 而且服务启动之后没找到停止服务的按钮, 只能暂时通过关闭HBuilder来实现关闭, 所以通过自建一个服务器测试, 没问题后再放入livereload.js中, 代码如下
var express=require('HBuilderX安装目录\\plugins\\nodeserver\\node_modules\\express\\index.js');
var app = express();
app.use(express.json())
app.post('*', function(req, res) {
var md = require('D:\\work\\proxyserver.js');
md(req, res);
});
app.listen(8489, function(){
console.log('running on 84889')
})