Centralizacion de la conexion MySQL a la base de datos. Uso de una unica raiz para el backend.

master
Fernando 2018-12-20 19:13:51 -05:00
parent 51c4651409
commit e9bc3f0078
20 changed files with 404 additions and 409 deletions

2
.gitignore vendored
View File

@ -23,6 +23,8 @@ yarn-error.log*
# Archivos para el deploy
*.js
*.js.map
/srv/mysql.ts
/srv/DatosConexion.ts
# Archivos de Materialize
/src/materialize/

31
app.ts
View File

@ -1,31 +0,0 @@
let express = require('express');
let app = express();
app.use(express.static('dist'));
// Que era history??
// @ts-ignore
// app.use(history());
app.use(express.urlencoded());
app.use(express.json());
app.get("/");
app.post('/links', require('./srv/LinksAnimes/obtenerLinks').obtenerLinks);
app.put('/links', require('./srv/LinksAnimes/modificarLink').modificarLinks);
app.put('/a/', require('./srv/Admin/crearAnime').crearAnime);
app.get('/a/', require('./srv/Admin/obtenerTodosAnimes').obtenerTodosAnimes);
app.get('/op/:id', require('./srv/Admin/OP/obtenerOPs').obtenerOPs);
app.post('/op/', require('./srv/Admin/OP/nuevoOP').nuevoOP);
app.get('/ed/:anime_ID', require('./srv/Admin/ED/obtenerEDs').obtenerEDs);
app.post('/ed/', require('./srv/Admin/ED/nuevoED').nuevoED);
app.get('/eps/variantes/:anime_ID', require('./srv/Admin/Eps/obtenerVariantes').obtenerVariantes);
app.get('/eps/links/:opcion_ID', require('./srv/Admin/Eps/obtenerLinks').obtenerLinks);
app.post('/eps/links/', require('./srv/Admin/Eps/crearLink').crearLink);
app.listen(8080);

26
package-lock.json generated
View File

@ -35,6 +35,7 @@
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz",
"integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==",
"dev": true,
"requires": {
"@types/connect": "3.4.32",
"@types/node": "10.12.5"
@ -44,6 +45,7 @@
"version": "3.4.32",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz",
"integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==",
"dev": true,
"requires": {
"@types/node": "10.12.5"
}
@ -51,12 +53,14 @@
"@types/events": {
"version": "1.2.0",
"resolved": "http://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
"integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA=="
"integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
"dev": true
},
"@types/express": {
"version": "4.16.0",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz",
"integrity": "sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==",
"dev": true,
"requires": {
"@types/body-parser": "1.17.0",
"@types/express-serve-static-core": "4.16.0",
@ -67,6 +71,7 @@
"version": "4.16.0",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.0.tgz",
"integrity": "sha512-lTeoCu5NxJU4OD9moCgm0ESZzweAx0YqsAcab6OB0EB3+As1OaHtKnaGJvcngQxYsi9UNv0abn4/DRavrRxt4w==",
"dev": true,
"requires": {
"@types/events": "1.2.0",
"@types/node": "10.12.5",
@ -76,22 +81,35 @@
"@types/mime": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz",
"integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA=="
"integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==",
"dev": true
},
"@types/mysql": {
"version": "2.15.5",
"resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.5.tgz",
"integrity": "sha512-4QAISTUGZbcFh7bqdndo08xRdES5OTU+JODy8VCZbe1yiXyGjqw1H83G43XjQ3IbC10wn9xlGd44A5RXJwNh0Q==",
"dev": true,
"requires": {
"@types/node": "10.12.5"
}
},
"@types/node": {
"version": "10.12.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.5.tgz",
"integrity": "sha512-GzdHjq3t3eGLMv92Al90Iq+EoLL+86mPfQhuglbBFO7HiLdC/rkt+zrzJJumAiBF6nsrBWhou22rPW663AAyFw=="
"integrity": "sha512-GzdHjq3t3eGLMv92Al90Iq+EoLL+86mPfQhuglbBFO7HiLdC/rkt+zrzJJumAiBF6nsrBWhou22rPW663AAyFw==",
"dev": true
},
"@types/range-parser": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.2.tgz",
"integrity": "sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw=="
"integrity": "sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw==",
"dev": true
},
"@types/serve-static": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz",
"integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==",
"dev": true,
"requires": {
"@types/express-serve-static-core": "4.16.0",
"@types/mime": "2.0.0"

View File

@ -3,16 +3,13 @@
"version": "0.1.0",
"private": true,
"scripts": {
"start": "node app.js",
"start": "vue-cli-service express:run --port 8080",
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"express": "vue-cli-service express:watch",
"express:run": "vue-cli-service express:run",
"deploy": "gcloud app deploy"
},
"dependencies": {
"@types/express": "^4.16.0",
"@types/node": "^10.12.5",
"connect-history-api-fallback": "^1.5.0",
"express": "^4.16.4",
"mysql": "^2.16.0",
@ -23,6 +20,9 @@
"yaml": "^1.0.2"
},
"devDependencies": {
"@types/mysql": "^2.15.5",
"@types/express": "^4.16.0",
"@types/node": "^10.12.5",
"@types/yaml": "^1.0.1",
"@vue/cli-plugin-typescript": "^3.0.5",
"@vue/cli-service": "^3.0.5",

View File

@ -1,12 +1,45 @@
<template>
<div>
<div class="caja colorTexto background2">
Esta es la barra lateral.
</div>
<div class="caja colorTexto background2">
Estadisticas:<br>
<br>
Hemos subido <b>{{ estadisticas.episodios }}</b> episodios,<br>
haciendo un total de <b>{{ estadisticas.gigas }} GB.</b>
</div>
</div>
</template>
<script>
const YAML = require('yaml');
export default {
name: "BarraLateral"
name: "BarraLateral",
data: function (){
return {
estadisticas: {
episodios: 'más de 200',
gigas: 'más de 65'
}
};
},
created: function () {
const vm = this;
const xhr = new XMLHttpRequest();
xhr.open("GET", "/estadisticas");
xhr.onload = () => {
console.log(xhr.responseText);
const respuesta = YAML.parse(xhr.responseText);
if (!respuesta.error) {
vm.estadisticas = respuesta;
} else {
console.log("Error al obtener las estadisticas :c");
}
};
xhr.send();
}
}
</script>

View File

@ -10,10 +10,9 @@ const nuevoED = (req: any, res: any) => {
const YAML = require('yaml');
const data: Data = YAML.parse(req.body.data);
const con = require('../../mysql').obtenerConexionMySql();
const con = require('../../index').conexionMySQL;
con.connect((err: Error) => {
if (!err && data) {
if (data) {
const query = `INSERT INTO ED (anime_ID, num_ED, nombre, artista, eps) VALUES ( ${data.anime_ID}, ${data.num_ED},
${con.escape(data.nombre)}, ${con.escape(data.artista)}, ${con.escape(data.eps)} )`;
@ -26,14 +25,10 @@ const nuevoED = (req: any, res: any) => {
}
});
} else if (!err) {
res.send("error: true");
console.log("Error. La data no existe en /Admin/ED/nuevoED (con.connect)");
} else {
res.send("error: true");
console.log("Error al conectarse a la base de datos en /Admin/ED/nuevoED (con.connect):\n" + err);
console.log("Error. La data no existe en /Admin/ED/nuevoED (con.connect)");
}
});
};

View File

@ -11,10 +11,10 @@ const obtenerEDs = (req: any, res: any) => {
const YAML = require('yaml');
const anime_ID: number = req.params.anime_ID;
const con = require('../../mysql').obtenerConexionMySql();
const con = require('../../index').conexionMySQL;
con.connect((err: Error) => {
if (!err) {
if (anime_ID) {
const query = `SELECT * FROM ED WHERE anime_ID=${anime_ID}`;
con.query(query, (err: Error, response: RespuestaED[]) => {
@ -30,9 +30,8 @@ const obtenerEDs = (req: any, res: any) => {
} else {
res.send("error: true");
console.log("Error al conectarse a la base de datos en /Admin/ED/obtenerEDs (con.connect):\n" + err);
console.log("Error en /Admin/ED/obtenerEDs: anime_ID no existe.");
}
});
};

View File

@ -8,13 +8,13 @@ interface formatoDataARecibir {
const crearLink = (req: any, res: any) => {
const con = require('../../mysql').obtenerConexionMySql();
const con = require('../../index').conexionMySQL;
const YAML = require('yaml');
const parametros: formatoDataARecibir = YAML.parse(req.body.params);
con.connect((err: Error) => {
if (!err && parametros) {
if (parametros) {
const query = `INSERT INTO eps (opcion_ID, num_ep, visitas, link, peso) VALUES (${parametros.opcion_ID},
${parametros.num_ep}, ${parametros.visitas}, ${con.escape(parametros.link)}, ${con.escape(parametros.peso)} )`;
@ -29,14 +29,10 @@ const crearLink = (req: any, res: any) => {
}
});
} else if (!err) {
} else {
console.log("Error. 'parametros' no existe en /Admin/Eps/crearEp -> con.connect (linea 16):\n" + parametros);
res.send("error: true");
} else {
console.log("Error al conectarse a la base de datos en /Admin/Eps/crearEp -> con.connect (linea 16):\n" + err);
res.send("error: true");
}
});
};

View File

@ -0,0 +1,34 @@
import {Connection, MysqlError} from "mysql";
import * as core from "express-serve-static-core";
const con: Connection = require('../../index').conexionMySQL;
const YAML = require('yaml');
interface respuesta {
peso: string
}
const estadisticas = (req: core.Request, res: core.Response) => {
con.query(`SELECT peso FROM eps`,(err: MysqlError, respuestas: respuesta[]) => {
if (!err) {
let totalMB = 0;
let cantidadEps = 0;
respuestas.forEach(data => {
totalMB += parseInt(data.peso);
cantidadEps++;
});
const respuesta: any = {
episodios: cantidadEps,
gigas: (totalMB/1024).toFixed(2)
};
res.send(YAML.stringify(respuesta));
}
});
};
module.exports.estadisticas = estadisticas;

View File

@ -9,13 +9,12 @@ interface epsRespuesta {
const obtenerLinks = (req: any, res: any) => {
const con = require('../../mysql').obtenerConexionMySql();
const con = require('../../index').conexionMySQL;
const YAML = require('yaml');
const opcion_ID = req.params.opcion_ID;
con.connect((err: Error) => {
if (!err && opcion_ID) {
if (opcion_ID) {
const query = `SELECT * FROM eps WHERE opcion_ID=${opcion_ID}`;
con.query(query, (err: Error, response: epsRespuesta[]) => {
@ -29,14 +28,10 @@ const obtenerLinks = (req: any, res: any) => {
}
});
} else if (!err) {
} else {
console.log("Error. opcion_ID no existe en /Admin/Eps/obtenerEps con.connect (linea 8)");
res.send("error: true");
} else {
console.log("");
res.send("error: true");
}
});
};

View File

@ -10,13 +10,12 @@ interface respuestaLinks {
const obtenerVariantes = (req: any, res: any) => {
const con = require('../../mysql').obtenerConexionMySql();
const con = require('../../index').conexionMySQL;
const YAML = require('yaml');
const anime_ID: string = req.params.anime_ID;
con.connect((err: Error) => {
if (!err && anime_ID) {
if (anime_ID) {
const query = `SELECT * FROM links_opciones WHERE links_ID=(SELECT links_ID FROM links WHERE anime_ID=${anime_ID})`;
@ -31,14 +30,10 @@ const obtenerVariantes = (req: any, res: any) => {
}
});
} else if (!err) {
} else {
console.log("Error. anime_ID no existe en Admin/Eps/obtenerVariantes con.connect:\n" + anime_ID);
res.send("error: true");
} else {
console.log("Error al conectarse a la Base de Datos en Admin/Eps/obtenerVariantes con.connect:\n" + err);
res.send("error: true");
}
});
};

View File

@ -1,13 +1,10 @@
const nuevoOP = (req: any, res: any) => {
const con = require('../../mysql').obtenerConexionMySql();
const con = require('../../index').conexionMySQL;
const YAML = require('yaml');
const data = YAML.parse(req.body.data);
con.connect((err: any) => {
if (!err) {
con.query(
`INSERT INTO OP (anime_ID, num_OP, nombre, artista, eps) VALUES \
( ${con.escape(data['anime_ID'])}, ${con.escape(data['num_OP'])}, ${con.escape(data['nombre'])},
@ -23,11 +20,6 @@ const nuevoOP = (req: any, res: any) => {
}
);
} else {
}
});
};
module.exports.nuevoOP = nuevoOP;

View File

@ -1,12 +1,11 @@
const obtenerOPs = (req: any, res: any) => {
const con = require('../../mysql').obtenerConexionMySql();
const con = require('../../index').conexionMySQL;
const YAML = require('yaml');
const animeID: number = req.params.id;
con.connect((err: any) => {
if (!err && animeID) {
if (animeID) {
const query = `SELECT * FROM OP WHERE anime_ID=${animeID}`;
con.query( query, (err: any, resultado: object) => {
@ -21,11 +20,9 @@ const obtenerOPs = (req: any, res: any) => {
});
} else {
console.log("Error al conectarse a la base de datos en /Admin/OP/obtenerOPs (con.connect):\n" + err);
console.log("Error en /Admin/OP/obtenerOPs: animeID no existe");
res.send("error: true");
}
});
};
module.exports.obtenerOPs = obtenerOPs;

View File

@ -1,13 +1,12 @@
const crearAnime = (req: any, res: any) => {
const con = require('../mysql').obtenerConexionMySql();
const con = require('../index').conexionMySQL;
const YAML = require('yaml');
if (req.body.data) {
const data = YAML.parse(req.body.data);
con.connect((err: any) => {
if (!err) {
const query = `INSERT INTO animes
(titulo, link, imgUrl, descripcion, estudio, eps, alAire, temporada, anio, fuente, generos, color)
VALUES (${con.escape(data.titulo)}, ${con.escape(data.link)}, ${con.escape(data.imgUrl)}, ${con.escape(data.descripcion)},
@ -26,14 +25,7 @@ const crearAnime = (req: any, res: any) => {
);
} else {
res.send("Error al conectarse...\n" + err);
}
});
} else {
res.send("Error. El servidor no recibio ningun dato.");
}
};

View File

@ -1,11 +1,8 @@
const obtenerTodosAnimes = (req: any, res: any) => {
const con = require('../mysql').obtenerConexionMySql();
const con = require('../index').conexionMySQL;
const YAML = require('yaml');
con.connect((err: any) => {
if (!err) {
con.query(
`SELECT anime_ID ,titulo FROM animes ORDER BY anime_ID DESC `,
(err: any, respuesta: any) => {
@ -14,17 +11,12 @@ const obtenerTodosAnimes = (req: any, res: any) => {
const resultado = YAML.stringify(respuesta);
res.send(resultado);
} else {
} else { // TODO
}
}
);
} else {
}
});
};
module.exports.obtenerTodosAnimes = obtenerTodosAnimes;

View File

@ -1,3 +1,5 @@
import {Connection} from "mysql";
interface RespuestaDatos {
estudio: string,
eps: number,
@ -35,13 +37,9 @@ const YAML = require('yaml');
const obtenerDatos = (req: any, res: any) => {
const anime_ID = req.paams.anime_ID;
const con = require('../mysql').obtenerConexionMySql();
con.connect((err: Error) => {
if (!err) {
const anime_ID = req.params.anime_ID;
const con: Connection = require('../index').conexionMySQL;
const respuesta: any = {};
const gestor = new GestorDeTareas(() => {
@ -118,13 +116,6 @@ const obtenerDatos = (req: any, res: any) => {
}
});
} else {
console.log("Error al conectarse a BBDD en /Animes/obtenerDatos (con.connect):\n" + err);
res.send("error: true");
}
});
};
module.exports.obtenerDatos = obtenerDatos;

View File

@ -2,10 +2,7 @@ const modificarLink = (req: any, res: any) => {
const ep_ID = req.body.ep_ID;
const con = require('../mysql').obtenerConexionMySql();
con.connect((err: any) => {
if (!err) {
const con = require('../index').conexionMySQL;
con.query(
`UPDATE eps SET visitas=visitas+1 WHERE ep_ID=${ep_ID};`,
@ -18,12 +15,6 @@ const modificarLink = (req: any, res: any) => {
}
);
} else {
console.log("Error al conectarse a base de datos.");
con.end();
}
});
};
module.exports.modificarLinks = modificarLink;

View File

@ -50,11 +50,11 @@ interface Links {
const obtenerLinks = (req: any, res: any) => {
const con = require('../mysql').obtenerConexionMySql();
const con = require('../index').conexionMySQL;
const animeID = req.body.animeID;
con.connect((err: any) => {
if (!err && animeID !== undefined) {
if (animeID) {
const data: Links = {aviso: '', sigEp: '', opciones: {}};
@ -143,10 +143,9 @@ const obtenerLinks = (req: any, res: any) => {
} else {
console.log("Hubo un error al conectarse a la base de datos :c");
console.log("AnimeID no existe");
res.send(`{ "exito": false }`);
}
});
};

View File

@ -1,6 +1,8 @@
import express from 'express';
import * as core from "express-serve-static-core";
import {MysqlError} from "mysql";
export default (app:any) => {
export default (app: core.Express) => {
app.use(express.json());
app.use(express.urlencoded());
@ -23,4 +25,24 @@ export default (app:any) => {
app.get('/eps/links/:opcion_ID', require('./Admin/Eps/obtenerLinks').obtenerLinks);
app.post('/eps/links/', require('./Admin/Eps/crearLink').crearLink);
app.get('/estadisticas', require('./Admin/Eps/estadisticas').estadisticas);
}
const conexionMySQL = (() => {
const mysql = require('mysql');
const SQL_CONNECT_DATA = require('./DatosConexion').DatosConexion;
const con = mysql.createConnection(SQL_CONNECT_DATA);
con.connect((err: MysqlError) => {
if (!err) {
console.log("MySQL iniciado c:");
} else {
throw err;
}
});
return con;
})();
module.exports.conexionMySQL = conexionMySQL;

View File

@ -1,17 +0,0 @@
const obtenerConexionMySql = () => {
const mysql = require('mysql');
const SQL_CONNECT_DATA:object = {
// Solo para produccion habilitar socketPath
// socketPath: '/cloudsql/pseudosubs:us-central1:base-principal',
user: 'root',
password: 'GgwTo5GryvDhAr06wk5opKhd',
database: 'animes_links',
multipleStatements: true
};
return mysql.createConnection(SQL_CONNECT_DATA);
};
module.exports.obtenerConexionMySql = obtenerConexionMySql;