Home > Blockchain >  Express can't start the server or connect to MongoDB
Express can't start the server or connect to MongoDB

Time:11-03

I'm a beginner and try to create a rest API following this tutorial. I expected to see Server is running on port: ${PORT}, but it seems like my code can't reach it. I got no error on my terminal and it looks like this

Here are my code:

server.js

require('dotenv').config({ path: './config.env' });
const express = require('express');
const cors = require('cors');
const dbo = require('./db/conn');

const PORT = process.env.PORT || 5000;
const app = express();

app.use(cors());
app.use(express.json());
app.use(require('./api/api'));

// Global error handling
app.use(function (err, _req, res) {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

// perform a database connection when the server starts
dbo.connectToServer(function (err) {
  if (err) {
    console.error(err);
    process.exit();
  }

  // start the Express server
  app.listen(PORT, () => {
    console.log(`Server is running on port: ${PORT}`);
  });
});

conn.js

const MongoClient = require('mongodb').MongoClient
const dotenv = require("dotenv")
dotenv.config()

const connectionString = process.env.MONGOURI
let db;

module.exports = {
  connectToServer : function(callback) {
    MongoClient.connect(connectionString, {
        useUnifiedTopology: true
      }, (err, client) => {
        if (err) return console.error(err)
    
        db = client.db('db-name');
        console.log('Connected to Database');

        return callback
     });
  },

  getDb: function () {
    return db;
  }
}

api.js

const express = require("express");

const gameRoutes = express.Router();

const dbo = require('../db/conn');


gameRoutes.route("/game").get(async function (_req, res) {
    const dbConnect = dbo.getDb();

    dbConnect
        .collection("game")
        .find({}).limit(50)
        .toArray(function(err, result) {
            if (err) {
                res.status(400).send("Error fetching listings!");
            } else {
                res.json(result);
            }
        })
    })

module.exports = gameRoutes;

Can you please tell me what's wrong with my code? I really can't find why the server is not running. Thanks in advance! I'll be very grateful for your help!

CodePudding user response:

In your connectToServer method you just returning the callback. But you actually need to call it as well.

So change this

return callback

to this

return callback(null);

If you want to pass the possible error from MongoClient to the callback as well, then change your connectToServer method to this :

connectToServer : function(callback) {
  MongoClient.connect(connectionString, {
    useUnifiedTopology: true
  }, (err, client) => {
    if (err) { return callback(err); }
    
    db = client.db('db-name');
    console.log('Connected to Database');

    return callback(null) // no error, so pass "null"
  });
}
  • Related