-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathserver.js
More file actions
66 lines (56 loc) · 1.68 KB
/
server.js
File metadata and controls
66 lines (56 loc) · 1.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
let express;
try {
express = require('express');
} catch {
express = require('./backend/node_modules/express');
}
const path = require('path');
const app = express();
const port = process.env.PORT || 3000;
app.use(express.json({ limit: '1mb' }));
app.use(express.urlencoded({ extended: true }));
const { app: backendApp } = require('./backend/server');
// Backend app owns /api/* paths.
app.use(backendApp);
let nextApp;
let nextHandler;
try {
let next;
try {
next = require('next');
} catch {
next = require('./frontend/node_modules/next');
}
nextApp = next({
dev: process.env.NODE_ENV !== 'production',
dir: path.join(__dirname, 'frontend'),
});
nextHandler = nextApp.getRequestHandler();
nextApp.prepare().then(() => {
console.log('✅ Next.js frontend ready');
// For non-API routes, serve Next.js.
app.use((req, res, nextMiddleware) => {
if (req.path.startsWith('/api/')) {
return nextMiddleware();
}
return nextHandler(req, res);
});
app.listen(port, (err) => {
if (err) throw err;
console.log(`\n🚀 Open Permit running on port ${port}`);
console.log(` Frontend: http://localhost:${port}`);
console.log(` Backend API: http://localhost:${port}/api\n`);
});
}).catch((error) => {
console.error('❌ Failed to prepare Next.js:', error.message);
process.exit(1);
});
} catch (error) {
console.error('❌ Error loading Next.js:', error.message);
console.log('Starting backend-only server...');
app.listen(port, (err) => {
if (err) throw err;
console.log(`\n🚀 Open Permit Backend running on port ${port}`);
console.log(' Frontend not available\n');
});
}