UNPKG

enhancer-data-bridge

Version:

A bridge between Enhancer Clould and user business datasource

77 lines (65 loc) 2.58 kB
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;