// Global unhandled exception handlers
process.on('uncaughtException', (error) => {
console.error('Uncaught Exception:', error);
process.exit(1); // Exit with failure code
});
process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
process.exit(1); // Exit with failure code
});
const start = async (): Promise<void> => {
try {
// Initialize Payload
await payload.init({
secret: process.env.PAYLOAD_SECRET || '',
express: app,
loggerOptions: loggerOptions,
});
// Handle Next.js build process
if (process.env.NEXT_BUILD) {
app.listen(PORT, async () => {
payload.logger.info(`Next.js is now building...`);
try {
// @ts-expect-error
await nextBuild(path.join(__dirname, '../'));
process.exit(0); // Successful exit
} catch (buildError) {
payload.logger.error('Next.js Build Error:', buildError);
process.exit(1); // Exit with failure
}
});
return;
}
// Initialize Next.js app
const nextApp = next({
dev: process.env.NODE_ENV !== 'production',
});
app.use('/v1/api', routes);
const nextHandler = nextApp.getRequestHandler();
app.use((req, res) => nextHandler(req, res));
// Start Next.js and server
await nextApp.prepare();
console.log('Starting Next.js...');
app.listen(PORT, async () => {
console.log(`Next.js App URL: ${process.env.PAYLOAD_PUBLIC_SERVER_URL}`);
printCurrentTime();
});
} catch (error) {
console.error('Server Startup Error:', error);
process.exit(1); // Exit with failure code
}
};
// Start the server
start().catch((error) => {
console.error('Failed to start server:', error);
process.exit(1);
});
// Global unhandled exception handlers
process.on('uncaughtException', (error) => {
console.error('Uncaught Exception:', error);
process.exit(1); // Exit with failure code
});
process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
process.exit(1); // Exit with failure code
});
const start = async (): Promise<void> => {
try {
// Initialize Payload
await payload.init({
secret: process.env.PAYLOAD_SECRET || '',
express: app,
loggerOptions: loggerOptions,
});
// Handle Next.js build process
if (process.env.NEXT_BUILD) {
app.listen(PORT, async () => {
payload.logger.info(`Next.js is now building...`);
try {
// @ts-expect-error
await nextBuild(path.join(__dirname, '../'));
process.exit(0); // Successful exit
} catch (buildError) {
payload.logger.error('Next.js Build Error:', buildError);
process.exit(1); // Exit with failure
}
});
return;
}
// Initialize Next.js app
const nextApp = next({
dev: process.env.NODE_ENV !== 'production',
});
app.use('/v1/api', routes);
const nextHandler = nextApp.getRequestHandler();
app.use((req, res) => nextHandler(req, res));
// Start Next.js and server
await nextApp.prepare();
console.log('Starting Next.js...');
app.listen(PORT, async () => {
console.log(`Next.js App URL: ${process.env.PAYLOAD_PUBLIC_SERVER_URL}`);
printCurrentTime();
});
} catch (error) {
console.error('Server Startup Error:', error);
process.exit(1); // Exit with failure code
}
};
// Start the server
start().catch((error) => {
console.error('Failed to start server:', error);
process.exit(1);
});