Cannot fetch a MongoDB collection.
sebight
HOBBYOP

a year ago

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();
    }
};

It does print "Connected to MongoDB" but then hangs and outputs the mentioned errors.

Any idea what might be up? Thank you.

48 Replies

sebight
HOBBYOP

a year ago

79c095c4-8db3-4df9-b281-a0313176f640


sebight
HOBBYOP

a year ago

Update: Also happens during a connection sometimes.


a year ago

the backend runs vite dev?


sebight
HOBBYOP

a year ago

Yes


a year ago

vite is a web bundler for frontend sites?


sebight
HOBBYOP

a year ago

To put it into perspective, it is a +server.js in a SvelteKit app


sebight
HOBBYOP

a year ago

I'm not sure I understand?


a year ago

gotcha, didn't know it was a sveletkit app


a year ago

you need to run the built files instead of a development server


sebight
HOBBYOP

a year ago

1301968884517048300
1301968884756381700


a year ago

let's fix the bigger issue first


a year ago

^


sebight
HOBBYOP

a year ago

After running
npm run build (vite build)
npm run preview (vite preview)


a year ago

please do not run a development server


sebight
HOBBYOP

a year ago

I'm testing it locally with the two commands I sent, which I assumed make it run in a prod environment.


sebight
HOBBYOP

a year ago

In that case, could you please clarify what you mean by "development server"?


a year ago

vite dev

dev is short for development


sebight
HOBBYOP

a year ago

Yes, but the last screenshot I sent is after running in vite preview


a year ago

vite preview is the same thing as vite dev


a year ago

on Railway you do not want to run a development server


sebight
HOBBYOP

a year 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.


a year ago

please update your start command to run the built file


sebight
HOBBYOP

a year ago

Ok, I'll try to do it, but I'm not exactly sure what the correct approach is


sebight
HOBBYOP

a year ago

Or rather I don't entirely know what the output of the build is


a year ago

run the build locally and look


sebight
HOBBYOP

a year 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


sebight
HOBBYOP

a year ago

Because as in all docs I found so far, prod env is apparently ran by vite preview.


a year ago

vite preview is a development server.

you need to update your start script to run the built server.


sebight
HOBBYOP

a year 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


sebight
HOBBYOP

a year ago

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.


sebight
HOBBYOP

a year ago

Oh yeah, after providing a $PORT env variable to a random number, it runs correctly on the specific port


sebight
HOBBYOP

a year ago

Any idea why the app might not be responding then?


sebight
HOBBYOP

a year ago

Custom port provided, oh god, did not notice that…


a year ago

wrong target port most likely


sebight
HOBBYOP

a year ago

Yes, I accidentally had an overridden target port


sebight
HOBBYOP

a year ago

Alright, so that is working.


sebight
HOBBYOP

a year ago

This was a fix of the wrong environment, but it should not affect the database problem I had, right?


sebight
HOBBYOP

a year ago

Because I'm still getting the same error 😅


sebight
HOBBYOP

a year ago

Or rather on a local node build/index.js the same error, on Railway I get MongoServerError: Authentication failed.


a year ago

locally you can't use the internal domain


a year ago

as for the error on Railway, you are using Mongoose wrong


a year ago

the database name needs to be passed in as an option, not part of the url.


sebight
HOBBYOP

a year ago

1301980176766472200


sebight
HOBBYOP

a year ago

Isn't this what I am doing and what is also in the docs?


a year ago

the docs I linked says otherwise


a year ago

please look at the dbName option


sebight
HOBBYOP

a year ago

1301980707429552000


sebight
HOBBYOP

a year ago

Okay, I see nw


Loading...