【问题标题】:Express can't start the server or connect to MongoDBExpress 无法启动服务器或连接到 MongoDB
【发布时间】:2021-11-02 21:20:59
【问题描述】:

我是一个初学者,并尝试在this tutorial 之后创建一个 REST API。我希望看到Server is running on port: ${PORT},但我的代码似乎无法访问它。我的终端上没有错误,它看起来像 this

这是我的代码:

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;

你能告诉我我的代码有什么问题吗?我真的找不到服务器没有运行的原因。提前致谢!非常感谢您的帮助!

【问题讨论】:

    标签: node.js mongodb api rest express


    【解决方案1】:

    在您的 connectToServer 方法中,您只需返回 callback。但实际上你也需要调用它。

    所以改变这个

    return callback
    

    到这里

    return callback(null);
    

    如果您也想将可能的错误从 MongoClient 传递给回调,请将您的 connectToServer 方法更改为:

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

    【讨论】:

      猜你喜欢
      • 2019-03-02
      • 2014-02-04
      • 2021-10-03
      • 2023-03-19
      • 2015-01-21
      • 2019-02-26
      • 1970-01-01
      • 2017-08-13
      相关资源
      最近更新 更多