Cannot fetch a MongoDB collection.

sebightHOBBY

7 months 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.

0 Replies

sebightHOBBY

7 months ago

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


sebightHOBBY

7 months ago

Update: Also happens during a connection sometimes.


7 months ago

the backend runs vite dev?


sebightHOBBY

7 months ago

Yes


7 months ago

vite is a web bundler for frontend sites?


sebightHOBBY

7 months ago

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


sebightHOBBY

7 months ago

I'm not sure I understand?


7 months ago

gotcha, didn't know it was a sveletkit app


7 months ago

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


sebightHOBBY

7 months ago

1301968884517048300
1301968884756381700


7 months ago

let's fix the bigger issue first


7 months ago

^


sebightHOBBY

7 months ago

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


7 months ago

please do not run a development server


sebightHOBBY

7 months ago

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


sebightHOBBY

7 months ago

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


7 months ago

vite dev

dev is short for development


sebightHOBBY

7 months ago

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


7 months ago

vite preview is the same thing as vite dev


7 months ago

on Railway you do not want to run a development server


sebightHOBBY

7 months 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.


7 months ago

please update your start command to run the built file


sebightHOBBY

7 months ago

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


sebightHOBBY

7 months ago

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


7 months ago

run the build locally and look


sebightHOBBY

7 months 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


sebightHOBBY

7 months ago

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


7 months ago

vite preview is a development server.

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


sebightHOBBY

7 months 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


sebightHOBBY

7 months 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.


sebightHOBBY

7 months ago

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


sebightHOBBY

7 months ago

Any idea why the app might not be responding then?


sebightHOBBY

7 months ago

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


7 months ago

wrong target port most likely


sebightHOBBY

7 months ago

Yes, I accidentally had an overridden target port


sebightHOBBY

7 months ago

Alright, so that is working.


sebightHOBBY

7 months ago

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


sebightHOBBY

7 months ago

Because I'm still getting the same error 😅


sebightHOBBY

7 months ago

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


7 months ago

locally you can't use the internal domain


7 months ago

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


7 months ago

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


sebightHOBBY

7 months ago

1301980176766472200


sebightHOBBY

7 months ago

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


7 months ago

the docs I linked says otherwise


7 months ago

please look at the dbName option


sebightHOBBY

7 months ago

1301980707429552000


sebightHOBBY

7 months ago

Okay, I see nw


Cannot fetch a MongoDB collection. - Railway Help Station