Refine database connections and handle potential errors during startup

Adjust the database connection logic to better distinguish between production and development environments, specifically addressing potential issues with PostgreSQL and Neon connections to prevent startup failures and improve error handling.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: e437ffed-c31b-44eb-9fd5-b6f9faa8e7ce
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/e437ffed-c31b-44eb-9fd5-b6f9faa8e7ce/zIqUatC
This commit is contained in:
michaelschal committed 2025-08-16 13:57:49 +00:00
1 parent b1ea9dcc9b
commit 2659a48e4e
2 files changed
+265 -11

No files matched your search

@@ -0,0 +1,238 @@
User-related
Environment-related
Registries
Logs
Notifications
Settings
New version available 2.27.9
DismissSee what's new
Community Edition
2.27.6 LTS
Containers>logiflow-logiflow-1>Logs
Container logs
admin
Log viewer settings
Auto-refresh logs
Wrap lines
Display timestamps
Fetch
All logs
Search
Filter...
Lines
100
Actions
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
at file:///app/dist/index.js:4874:7
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at next (/app/node_modules/express/lib/router/route.js:149:13)
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
}
POST /api/login 500 in 2ms
TypeError: Cannot read properties of null (reading 'select')
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
at Strategy._verify (file:///app/dist/index.js:4832:38)
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
at file:///app/dist/index.js:4874:7
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at next (/app/node_modules/express/lib/router/route.js:149:13)
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
Server error: {
status: 500,
message: "Cannot read properties of null (reading 'select')",
error: TypeError: Cannot read properties of null (reading 'select')
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
at Strategy._verify (file:///app/dist/index.js:4832:38)
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
at file:///app/dist/index.js:4874:7
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at next (/app/node_modules/express/lib/router/route.js:149:13)
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
}
POST /api/login 500 in 2ms
TypeError: Cannot read properties of null (reading 'select')
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
at Strategy._verify (file:///app/dist/index.js:4832:38)
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
at file:///app/dist/index.js:4874:7
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at next (/app/node_modules/express/lib/router/route.js:149:13)
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
Server error: {
status: 500,
message: "Cannot read properties of null (reading 'select')",
error: TypeError: Cannot read properties of null (reading 'select')
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
at Strategy._verify (file:///app/dist/index.js:4832:38)
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
at file:///app/dist/index.js:4874:7
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at next (/app/node_modules/express/lib/router/route.js:149:13)
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
}
POST /api/login 500 in 2ms
TypeError: Cannot read properties of null (reading 'select')
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
at Strategy._verify (file:///app/dist/index.js:4832:38)
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
at file:///app/dist/index.js:4874:7
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at next (/app/node_modules/express/lib/router/route.js:149:13)
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
Server error: {
status: 500,
message: "Cannot read properties of null (reading 'select')",
error: TypeError: Cannot read properties of null (reading 'select')
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
at Strategy._verify (file:///app/dist/index.js:4832:38)
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
at file:///app/dist/index.js:4874:7
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at next (/app/node_modules/express/lib/router/route.js:149:13)
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
}
POST /api/login 500 in 2ms
TypeError: Cannot read properties of null (reading 'select')
at DatabaseStorage.getUserByUsername (file:///app/dist/index.js:1204:33)
at Strategy._verify (file:///app/dist/index.js:4832:38)
at Strategy.authenticate (/app/node_modules/passport-local/lib/strategy.js:90:12)
at attempt (/app/node_modules/passport/lib/middleware/authenticate.js:378:16)
at authenticate (/app/node_modules/passport/lib/middleware/authenticate.js:379:7)
at file:///app/dist/index.js:4874:7
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
at next (/app/node_modules/express/lib/router/route.js:149:13)
at Route.dispatch (/app/node_modules/express/lib/router/route.js:119:3)
at Layer.handle [as handle_request] (/app/node_modules/express/lib/router/layer.js:95:5)
+27 -11
View File
@@ -14,15 +14,15 @@ console.log('🔗 Database initialization:', {
let db: any;
let pool: any;
if (dbUrl && (isProduction || process.env.FORCE_POSTGRES === 'true')) {
// Use PostgreSQL for production or when forced
console.log('🐘 Using PostgreSQL database');
if (isProduction && dbUrl && (dbUrl.includes('logiflow-db') || dbUrl.includes('localhost') || dbUrl.includes('127.0.0.1'))) {
// Standard PostgreSQL for production Docker
console.log('🐳 PRODUCTION: Using standard PostgreSQL');
const { Pool } = await import('pg');
const { drizzle } = await import('drizzle-orm/node-postgres');
pool = new Pool({
connectionString: dbUrl,
ssl: dbUrl.includes('localhost') ? false : { rejectUnauthorized: false },
ssl: false,
max: 10,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 5000,
@@ -38,15 +38,31 @@ if (dbUrl && (isProduction || process.env.FORCE_POSTGRES === 'true')) {
});
} catch (error) {
console.error('❌ PostgreSQL connection test failed:', error);
// Continue anyway, will use MemStorage as fallback
pool = null;
db = null;
}
} else {
// Development fallback: use MemStorage
console.log('🔧 DEV: Using MemStorage (development fallback)');
pool = null;
db = null;
// Fallback: use Neon for development (but will be overridden by MemStorage)
console.log('🔧 DEV: Using Neon (fallback, will use MemStorage)');
const { Pool, neonConfig } = await import('@neondatabase/serverless');
const { drizzle } = await import('drizzle-orm/neon-serverless');
const ws = await import('ws');
neonConfig.webSocketConstructor = ws.default;
if (dbUrl) {
try {
pool = new Pool({ connectionString: dbUrl });
db = drizzle({ client: pool, schema });
} catch (error) {
console.error('❌ Neon connection failed, will use MemStorage:', error);
pool = null;
db = null;
}
} else {
// Create dummy instances for development
pool = null;
db = null;
console.log('🔧 DEV: No DATABASE_URL, using MemStorage');
}
}
export { db, pool };