93 lines
2.9 KiB
JavaScript
93 lines
2.9 KiB
JavaScript
// server.js
|
|
const express = require('express');
|
|
const mysql = require('mysql2');
|
|
const cors = require('cors');
|
|
const bodyParser = require('body-parser');
|
|
require('dotenv').config();
|
|
|
|
const app = express();
|
|
app.use(cors());
|
|
app.use(bodyParser.json());
|
|
app.use(express.static(__dirname));
|
|
|
|
// Create MySQL connection
|
|
let db;
|
|
function handleDisconnect() {
|
|
const connectionString = process.env.DATABASE_URL || process.env.MYSQL_URL || process.env.MYSQL_PRIVATE_URL;
|
|
db = connectionString
|
|
? mysql.createConnection(connectionString)
|
|
: mysql.createConnection({
|
|
host: process.env.DB_HOST || 'localhost',
|
|
user: process.env.DB_USER || 'root',
|
|
password: process.env.DB_PASSWORD || '',
|
|
database: process.env.DB_NAME || 'spbu_gis',
|
|
port: process.env.DB_PORT || 3306
|
|
});
|
|
|
|
db.connect(err => {
|
|
if (err) {
|
|
console.error('Database connection failed: ' + err.stack);
|
|
setTimeout(handleDisconnect, 2000);
|
|
} else {
|
|
console.log('Connected to MySQL database.');
|
|
}
|
|
});
|
|
|
|
db.on('error', err => {
|
|
console.error('Database error:', err);
|
|
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
|
|
handleDisconnect();
|
|
} else {
|
|
throw err;
|
|
}
|
|
});
|
|
}
|
|
handleDisconnect();
|
|
|
|
// GET route to fetch all SPBU locations
|
|
app.get('/api/spbus', (req, res) => {
|
|
db.query('SELECT * FROM locations', (err, results) => {
|
|
if (err) throw err;
|
|
res.json(results);
|
|
});
|
|
});
|
|
|
|
// POST route to save a new SPBU location
|
|
app.post('/api/spbus', (req, res) => {
|
|
const { name, open_window, spbu_number, lat, lng } = req.body;
|
|
|
|
const query = 'INSERT INTO locations (name, open_window, spbu_number, lat, lng) VALUES (?, ?, ?, ?, ?)';
|
|
db.query(query, [name, open_window, spbu_number, lat, lng], (err, result) => {
|
|
if (err) throw err;
|
|
res.json({ message: 'SPBU saved successfully!', id: result.insertId });
|
|
});
|
|
});
|
|
|
|
// PUT route to update an SPBU location
|
|
app.put('/api/spbus/:id', (req, res) => {
|
|
const { id } = req.params;
|
|
const { name, open_window, spbu_number, lat, lng } = req.body;
|
|
|
|
const query = 'UPDATE locations SET name = ?, open_window = ?, spbu_number = ?, lat = ?, lng = ? WHERE id = ?';
|
|
db.query(query, [name, open_window, spbu_number, lat, lng, id], (err, result) => {
|
|
if (err) throw err;
|
|
res.json({ message: 'SPBU updated successfully!' });
|
|
});
|
|
});
|
|
|
|
// DELETE route to delete an SPBU location
|
|
app.delete('/api/spbus/:id', (req, res) => {
|
|
const { id } = req.params;
|
|
|
|
const query = 'DELETE FROM locations WHERE id = ?';
|
|
db.query(query, [id], (err, result) => {
|
|
if (err) throw err;
|
|
res.json({ message: 'SPBU deleted successfully!' });
|
|
});
|
|
});
|
|
|
|
// Start the server
|
|
const PORT = process.env.PORT || 3000;
|
|
app.listen(PORT, () => {
|
|
console.log(`Server running on http://localhost:${PORT}`);
|
|
}); |