UNPKG

mysql-endpoint-express

Version:
138 lines (125 loc) 4.46 kB
require('dotenv').config(); const express = require('express'); const mysql = require('mysql'); const app = express(); app.use(express.json()); const connection = mysql.createConnection({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_DATABASE }); connection.connect(); app.use((req, res, next) => { const allowedOrigin = process.env.ALLOWED_ORIGIN; const allowedMethods = process.env.ALLOWED_METHODS; const allowedHeaders = process.env.ALLOWED_HEADERS; res.setHeader('Access-Control-Allow-Origin', allowedOrigin); res.setHeader('Access-Control-Allow-Methods', allowedMethods); res.setHeader('Access-Control-Allow-Headers', allowedHeaders); next(); }); const checkRole = (allowedRoles) => { return (req, res, next) => { const role = req.headers.role; if (allowedRoles.includes(role) || !role) { next(); } else { res.status(403).send('Forbidden'); } }; }; app.get('/api', checkRole([process.env.PREFIX_ROLE]), (req, res) => { connection.query('SHOW TABLES', (error, tables) => { if (error) throw error; const tableNames = tables.map(table => table[`Tables_in_${connection.config.database}`]); const data = {}; tableNames.forEach(table => { connection.query(`SELECT * FROM ${table}`, (error, results) => { if (error) throw error; data[table] = results; if (Object.keys(data).length === tableNames.length) { res.json(data); } }); }); }); }); app.get('/api/:table', checkRole([process.env.PREFIX_ROLE]), (req, res) => { const { table } = req.params; connection.query(`SELECT * FROM ${table}`, (error, results) => { if (error) { res.status(500).send('Error retrieving data from database'); } else { res.status(200).json(results); } }); }); app.post('/api/:table', checkRole([process.env.PREFIX_ROLE]), (req, res) => { const { table } = req.params; const data = req.body; connection.query(`INSERT INTO ${table} SET ?`, data, (error, results) => { if (error) { res.status(500).send('Error creating data in database'); } else { res.status(201).send('Data created successfully'); } }); }); app.put('/api/:table/:id', checkRole([process.env.PREFIX_ROLE]), (req, res) => { const { table, id } = req.params; const data = req.body; connection.query(`SHOW KEYS FROM ${table} WHERE Key_name = 'PRIMARY'`, (error, results) => { if (error) { console.log(error); res.status(500).send('Error retrieving primary key information'); } else { if (results.length > 0) { const primaryKeyColumn = results[0].Column_name; connection.query(`UPDATE ${table} SET ? WHERE ${primaryKeyColumn} = ?`, [data, id], (error, results) => { if (error) { console.log(error); res.status(500).send('Error updating data in database'); } else { res.status(200).send('Data updated successfully'); } }); } else { res.status(404).send('Primary key not found in table'); } } }); }); app.delete('/api/:table/:id', checkRole([process.env.PREFIX_ROLE]), (req, res) => { const { table, id } = req.params; connection.query(`SHOW KEYS FROM ${table} WHERE Key_name = 'PRIMARY'`, (error, results) => { if (error) { console.log(error); res.status(500).send('Error retrieving primary key information'); } else { if (results.length > 0) { const primaryKeyColumn = results[0].Column_name; connection.query(`DELETE FROM ${table} WHERE ${primaryKeyColumn} = ?`, [id], (error, deleteResult) => { if (error) { console.log(error); res.status(500).send('Error deleting data from database'); } else { res.status(200).send('Data deleted successfully'); } }); } else { res.status(404).send('Primary key not found in table'); } } }); }); app.get('/', (req, res) => { res.status(200).send('Server Running, Go ../api'); }); app.get('*', (req, res) => { res.status(404).send('Data not found'); }); app.listen(process.env.DB_PORT, () => { console.log('Server is running on port ' + process.env.DB_PORT); }); module.exports = app;