Files
UAS-SIG/server.js
T
2026-06-09 12:37:27 +07:00

61 lines
2.3 KiB
JavaScript

const express = require('express');
const cors = require('cors');
const survey_routes = require('./routes/survey_routes');
const auth_routes = require('./routes/auth_routes');
const admin_routes = require('./routes/admin_routes');
const map_routes = require('./routes/map_routes');
// Menginisialisasi aplikasi Express
const app = express();
const port = 3000;
// Praktik keamanan: Mengaktifkan CORS agar API hanya bisa diakses oleh domain frontend yang diizinkan (atau semua domain saat masa pengembangan)
app.use(cors());
// Membaca JSON dari body request
app.use(express.json());
// Mendaftarkan rute API utama
app.use('/api/survey', survey_routes);
app.use('/api/auth', auth_routes);
app.use('/api/admin', admin_routes);
app.use('/api/map', map_routes);
// Jika folder frontend Anda bernama 'ui'
app.use(express.static('ui'));
// Mengarahkan pengguna yang mengakses URL kosong langsung ke index.html
app.get('/', (req, res) => {
res.redirect('/index.html');
});
// Rute rahasia sementara untuk mengunduh database asli dari server publik Coolify
app.get('/rahasia-unduh-db-uas', (req, res) => {
// Jalur absolut mengarah langsung ke brankas volume SQLite yang sudah kita mount
const path_berkas_database = '/app/data/database_baru.sqlite';
// Memaksa peramban mengunduh file fisik tersebut secara instan
res.download(path_berkas_database, 'database_produksi.sqlite', (err) => {
if (err) {
console.error('Gagal mengunduh berkas basis data:', err.message);
res.status(500).send('Berkas database belum terbentuk atau folder kosong.');
}
});
});
// Menangkap request ke rute yang tidak terdaftar
app.use((req, res, next) => {
// Baris kompleks: Middleware ini menangkap semua lalu lintas HTTP (GET, POST, dll) yang tidak cocok dengan definisi rute di atasnya. Hal ini mencegah kebocoran informasi stack trace default dari Express dan mengembalikan respons JSON standar yang aman.
res.status(404).json({ error: 'Endpoint yang Anda cari tidak ditemukan di server ini.' });
});
// Menangkap error parsing JSON
app.use((err, req, res, next) => {
console.error('Kesalahan server global:', err.message);
res.status(500).json({ error: 'Terjadi kesalahan sistem internal.' });
});
// Menjalankan server
app.listen(port, () => {
console.log(`Server WebGIS berjalan dan siap diakses pada port ${port}`);
});