68 lines
2.4 KiB
JavaScript
68 lines
2.4 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'));
|
|
|
|
// 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) => {
|
|
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);
|
|
}
|
|
}); |