Files
Webgis_3P-Pemetaan_Pencatat…/server.js
T

68 lines
2.5 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');
// Mengimpor modul pengontrol otomatisasi data seeder
const { inisialisasi_dan_seeding } = require('./seeders/seed_manager');
// Menginisialisasi aplikasi Express
const app = express();
const port = 3000;
// Praktik keamanan: Mengaktifkan CORS agar API hanya bisa diakses oleh domain frontend yang diizinkan
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', { index: false }));
// Mengarahkan pengguna yang mengakses URL kosong langsung ke index.html
app.get('/', (req, res) => {
res.redirect('/portal.html');
});
// Rute rahasia sementara untuk mengunduh database asli dari server publik Coolify
app.get('/rahasia-unduh-db-uas', (req, res) => {
const path_berkas_database = '/app/data/database_baru.sqlite';
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) => {
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, async () => {
console.log(`Server WebGIS berjalan dan siap diakses pada port ${port}`);
// Praktik Penanganan Kesalahan Otomatis:
// Menjalankan proses pembuatan tabel dan penanaman data master jika SQLite kosong saat startup
try {
await inisialisasi_dan_seeding();
console.log('Sinkronisasi data seeder bawaan ke database produksi sukses.');
} catch (error_sistem_seed) {
console.error('Peringatan: Gagal mengeksekusi database seeder:', error_sistem_seed.message);
}
});