enhancer-data-bridge
Version:
A bridge between Enhancer Clould and user business datasource
77 lines (65 loc) • 2.58 kB
JavaScript
var fs = require('fs-extra');
var path = require('path');
var os = require('os');
var express = require( 'express' );
var router = express.Router();
var requireNocache = require('require-nocache')(module);
var head = "var requireNocache = require('require-nocache')(module);";
var moduleBase = path.resolve(__dirname, '../repository/project/custom-module');
if (os.platform() === 'win32') {
moduleBase = moduleBase.replace(/\\/g, '/') + '/';
} else {
moduleBase = moduleBase + '/';
}
router.post('/loadModule', function(req, res) {
var mod = req.body;
if (!mod.name || typeof mod.module === 'undefined') {
return res.end();
}
mod.module = head + '\n' + mod.module.replace(/require\(\s*(\'|\")@custom\//g, function(s, $1) {
return 'requireNocache(' + $1 + moduleBase;
});
var p = moduleBase + mod.name + '.js';
fs.ensureFileSync(p);
fs.writeFileSync(p, mod.module);
try {
requireNocache(p);
} catch(e) {
var message = 'The module has error:<br>' + e.stack.replace(moduleBase, '@custom/');
console.error('Load module ' + mod.name + ' failed:');
console.error(message);
res.send({success: false, message: message });
return;
}
console.log('Module loaded: ' + mod.name);
res.send({success: true, message: 'ok'});
});
router.options('/loadModule', function (req, res) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,POST,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
res.sendStatus(200);
});
router.post('/loadAllModules', function(req, res) {
var list = req.body.moduleList;
if (!list) {
return res.end();
}
list.forEach(function(l) {
l.module = head + l.module.replace(/require\(\s*(\'|\")@custom\//g, function(s, $1) {
return 'requireNocache(' + $1 + moduleBase;
});
var p = moduleBase + l.name + '.js';
fs.ensureFileSync(p);
fs.writeFileSync(p, l.module);
console.log('Module loaded: ' + l.name);
});
res.send({success: true, message: 'ok'});
});
router.options('/loadAllModules', function (req, res) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,POST,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
res.sendStatus(200);
});
module.exports = router;