-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
120 lines (106 loc) · 3.3 KB
/
server.js
File metadata and controls
120 lines (106 loc) · 3.3 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
const express = require("express");
const path = require("path");
const app = express();
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const cors = require("cors");
require("dotenv").config();
//needed this line to properly parse json objects in req
app.use(bodyParser.json());
//cors
//front end and back end deployed to different urls
//needed to avoid cors error
app.use(
cors({
origin: process.env.ORIGIN,
})
);
//requiring the routes
const aminoAcids = require("./routes/aminoAcids");
const functionalGroups = require("./routes/functionalGroups");
const physics = require("./routes/physics");
const biology = require("./routes/biology");
const webDev = require("./routes/webDev");
//setup of db
const dbConnection = process.env.DB_CONNECTION;
console.log("================================================");
console.log("DEBUG: Full DB Connection String Check");
console.log("================================================");
if (!dbConnection) {
console.error("❌ DB_CONNECTION is UNDEFINED or EMPTY!");
} else {
console.log(`✓ Length: ${dbConnection.length} characters`);
// Mask password but show structure
const maskedConnection = dbConnection.replace(
/(:\/\/)([^:]+):([^@]+)(@)/,
'$1$2:****$4'
);
console.log(`✓ Masked String: ${maskedConnection}`);
// Check for invisible characters
const hasInvisibleChars = /[\x00-\x1F\x7F-\x9F]/.test(dbConnection);
console.log(`✓ Has invisible chars: ${hasInvisibleChars}`);
// Show each query parameter
if (dbConnection.includes('?')) {
const params = dbConnection.split('?')[1];
console.log(`✓ Query params: ${params}`);
}
}
console.log("================================================");
mongoose
.connect(dbConnection, {
serverSelectionTimeoutMS: 5000,
socketTimeoutMS: 45000,
})
.then(() => {
console.log("Connected to the database");
})
.catch((err) => {
console.error("Error connecting to MongoDB:", err.message);
});
//routes
app.use("/aminoacids", aminoAcids);
app.use("/functionalgroups", functionalGroups);
app.use("/physics", physics);
app.use("/biology", biology);
app.use("/webdev", webDev);
// Debug route to confirm Database Connection works
app.get("/debug/db-check", async (req, res) => {
try {
const AminoAcid = require("./models/aminoAcid");
// Try to count documents
const count = await AminoAcid.countDocuments();
// Try to get one document
const sample = await AminoAcid.findOne();
res.json({
message: "Database Debug Results",
status: "Connected",
collection: "aminoacids",
documentCount: count,
sampleData: sample
});
} catch (error) {
console.error("Database Debug Error:", error);
res.status(500).json({
error: "Database Connection Failed",
details: error.message
});
}
});
// Error handling middleware
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({
error: 'Something went wrong!',
message: err.message
});
});
//for heroku deployment
// Basic root route for backend API status
app.get("/", (req, res) => {
res.send("FlashCard API is running 🚀. Please access the frontend app.");
});
//listen to port
const PORT = process.env.PORT || 5000;
app.listen(PORT, function () {
console.log(`Server is running on port ${PORT}`);
});