R
Railway•3w ago
Seb

Cannot fetch a MongoDB collection.

Whenever I call my code to fetch a MongoDB collection, it results in a
MongooseError: Operation games.find() buffering timed out after 10000ms
After a bit, this error pops up: MongooseServerSelectionError: getaddrinfo ENOTFOUND mongodb.railway.internal Any idea why it might be? This is my code to fetch the data:
import axios from "axios";
import mongoose from "mongoose";
import { MONGO_URL } from '$env/static/private'

const gameSchema = new mongoose.Schema({
name: String
});

export async function GET({request}) {
console.log("GET /api/games");
await mongoose.connect(MONGO_URL + "/test2");
const Game = mongoose.model("Game", gameSchema);
console.log("Connected to MongoDB");

try {
const gameList = await Game.find({});
console.log(gameList);

return new Response(JSON.stringify(gameList), {
status: 200,
headers: {
"Content-Type": "application/json",
},
});
} catch (error) {
console.error("Error fetching games:", error);
return new Response("Error fetching data", {
status: 500,
headers: {
"Content-Type": "application/json",
},
});
} finally {
mongoose.connection.close();
}
};
import axios from "axios";
import mongoose from "mongoose";
import { MONGO_URL } from '$env/static/private'

const gameSchema = new mongoose.Schema({
name: String
});

export async function GET({request}) {
console.log("GET /api/games");
await mongoose.connect(MONGO_URL + "/test2");
const Game = mongoose.model("Game", gameSchema);
console.log("Connected to MongoDB");

try {
const gameList = await Game.find({});
console.log(gameList);

return new Response(JSON.stringify(gameList), {
status: 200,
headers: {
"Content-Type": "application/json",
},
});
} catch (error) {
console.error("Error fetching games:", error);
return new Response("Error fetching data", {
status: 500,
headers: {
"Content-Type": "application/json",
},
});
} finally {
mongoose.connection.close();
}
};
It does print "Connected to MongoDB" but then hangs and outputs the mentioned errors. Any idea what might be up? Thank you.
Solution:
the database name needs to be passed in as an option, not part of the url. https://mongoosejs.com/docs/api/mongoose.html#Mongoose.prototype.connect()...
Jump to solution
30 Replies
Percy
Percy•3w ago
Project ID: 79c095c4-8db3-4df9-b281-a0313176f640
Seb
SebOP•3w ago
79c095c4-8db3-4df9-b281-a0313176f640 Update: Also happens during a connection sometimes.
Brody
Brody•3w ago
the backend runs vite dev?
Seb
SebOP•3w ago
Yes
Brody
Brody•3w ago
vite is a web bundler for frontend sites?
Seb
SebOP•3w ago
To put it into perspective, it is a +server.js in a SvelteKit app I'm not sure I understand?
Brody
Brody•3w ago
gotcha, didn't know it was a sveletkit app you need to run the built files instead of a development server
Seb
SebOP•3w ago
No description
No description
Brody
Brody•3w ago
let's fix the bigger issue first ^
Seb
SebOP•3w ago
After running npm run build (vite build) npm run preview (vite preview)
Brody
Brody•3w ago
please do not run a development server
Seb
SebOP•3w ago
I'm testing it locally with the two commands I sent, which I assumed make it run in a prod environment. In that case, could you please clarify what you mean by "development server"?
Brody
Brody•3w ago
vite dev dev is short for development
Seb
SebOP•3w ago
Yes, but the last screenshot I sent is after running in vite preview
Brody
Brody•3w ago
vite preview is the same thing as vite dev on Railway you do not want to run a development server
Seb
SebOP•3w ago
Oh, I didn't know that. Sorry, I haven't worked that much with Vite before and this is what I found it the docs regarding the build process.
Brody
Brody•3w ago
please update your start command to run the built file
Seb
SebOP•3w ago
Ok, I'll try to do it, but I'm not exactly sure what the correct approach is Or rather I don't entirely know what the output of the build is
Brody
Brody•3w ago
run the build locally and look
Seb
SebOP•3w ago
I see the output/server and output/client with files in it, but I don't know how that connects to Railway, or more specifically which commands run that Because as in all docs I found so far, prod env is apparently ran by vite preview.
Brody
Brody•3w ago
vite preview is a development server. you need to update your start script to run the built server.
Seb
SebOP•3w ago
Alright, I fixed it by adding the node adapter and npm run start to be node build/index.js I am having issues with the app not responding on Railway, so I'll have to fix the port real quick Actually, no, that seems fine... the default is set to 3000, and on Railway, it runs at 8080, presumably something provided by the $PORT env variable. Oh yeah, after providing a $PORT env variable to a random number, it runs correctly on the specific port Any idea why the app might not be responding then? Custom port provided, oh god, did not notice that...
Brody
Brody•3w ago
wrong target port most likely
Seb
SebOP•3w ago
Yes, I accidentally had an overridden target port Alright, so that is working. This was a fix of the wrong environment, but it should not affect the database problem I had, right? Because I'm still getting the same error 😅 Or rather on a local node build/index.js the same error, on Railway I get MongoServerError: Authentication failed.
Brody
Brody•3w ago
locally you can't use the internal domain as for the error on Railway, you are using Mongoose wrong
Solution
Brody
Brody•3w ago
the database name needs to be passed in as an option, not part of the url. https://mongoosejs.com/docs/api/mongoose.html#Mongoose.prototype.connect()
Seb
SebOP•3w ago
No description
Seb
SebOP•3w ago
Isn't this what I am doing and what is also in the docs?
Brody
Brody•3w ago
the docs I linked says otherwise please look at the dbName option
Seb
SebOP•3w ago
Okay, I see now
Want results from more Discord servers?
Add your server