61 lines
2.3 KiB
JavaScript
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}`);
|
|
}); |