Skip to content

Instantly share code, notes, and snippets.

@Dviejopomata
Last active June 3, 2016 09:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Dviejopomata/68c917415c0a756aec7a4759b164420b to your computer and use it in GitHub Desktop.
Save Dviejopomata/68c917415c0a756aec7a4759b164420b to your computer and use it in GitHub Desktop.
//=================================================================================================
// el esquema es el siguiente:
// tenemos una aplicación web instalada en una máquina
// tenemos una aplicación api instalada en otra máquina
// tenemos módulos que se instalan via npm en la aplicación web y en el api (son los mismos módulos)
// en desarrollo trabajaremos solo con lo aplicación web y los modulos se instalarán localmente
// en producción los modulos los instalamos junto con el web api
// en producción tambien se podrían desplegar junto con la web
//=================================================================================================
/// ESTE ES EL FICHERO WEBAPI.TS que implementa un express simple que respondera dinamicamente a las
// rutas /:app/:bdd/:module/:submodulo/:procedimiento/:funcion
var express = require('express');
var app = express();
var process = require("process");
var fs = require("fs");
var http = require("http");
// refresco del modulo
fs.watch('.', {encoding: 'buffer'}, (event, filename) => {
if (filename.endsWith(".js"))
{
delete require.cache[require.resolve(`./${filename}`)]
console.log(filename);
}
});
// get y/o post
app.use("/:app/:bdd/:module/:submodulo/:procedimiento/:funcion", function(req, res)
{
try
{
// invocación
var r = require("./"+req.params.procedimiento)[req.params.funcion](req.query);
res.send(r);
}
catch(e)
{
res.send({error:""+e, parametros:JSON.stringify(req.params)});
}
})
app.listen(3001, function () {
console.log('Example app listening on port 3001!');
});
//=================================================================================================
// este es el fichero web desde donde se hace una llamada dinámicamente a procedimientos
// vis dos formas
// localAPI or webAPI
//=================================================================================================
var express = require('express');
var app = express();
var process = require("process");
var fs = require("fs");
var api = require("./api")
fs.watch('.', {encoding: 'buffer'}, (event, filename) => {
if (filename.endsWith(".js"))
{
delete require.cache[require.resolve(`./${filename}`)]
console.log(filename);
}
});
var ruta = "WEBAPI"
app.use("/:app/:bdd/:module/:submodulo/:procedimiento/:funcion", function(req, res)
{
try
{
if (ruta == "WEBAPI")
api.webApi(req.params.app, req.params.bdd, req.params.module, req.params.submodulo, req.params.procedimiento, req.params.funcion, req, res)
else
api.localApi(req.params.app, req.params.bdd, req.params.module, req.params.submodulo, req.params.procedimiento, req.params.funcion, req, res)
}
catch(e)
{
res.send("el error " +e);
}
})
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
//=======================================================================================
// fichero que contiene las funciones WEBAPI o LOCALAPI
// ==================
var fs = require("fs");
var http = require("http");
var request = require('request');
// se usa el modulo request para la cliente request al web api
export var webApi = (app, bdd, modulo, submodulo, procedimiento, funcion, req, res1) =>
{
var datos = {};
request.post({url: `http://pc22072.suma.es:3001/${app}/${bdd}/${modulo}/${submodulo}/${procedimiento}/${funcion}`, formData: datos},
function optionalCallback(err, res, body) {
if (err) {
res1.send({error:err});
}
else
{
res1.send(body);
}
});
}
export var localApi = (app, bdd, modulo, submodulo, procedimiento, funcion, req, res) =>
{
var r = require("./"+procedimiento)[funcion](req.query);
res.send(r);
}
//====================================================
// ejemplo de un `procedimiento llamado dinamicamente
// aquí es donde trabaja el programador
//====================================================
"use strict";
exports.f1 = (params) => {
// aquí irian los accesos a la base de datos
return { l: "11111111111111111111", "aa": params };
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment