【问题标题】:mongoDB is not working after I deployed my MERN app using Heroku, while the app works fine on my localhost在我使用 Heroku 部署我的 MERN 应用程序后,mongoDB 无法正常工作,而该应用程序在我的本地主机上运行良好
【发布时间】:2021-08-16 01:21:37
【问题描述】:

我为这个问题拉了几个小时的头发...... :(

该应用在我的本地主机上运行良好,但 mongoDB 似乎没有连接到我的应用。

它一直给我一个“类型错误”,我认为它没有得到来自 mongoDB 的响应。

这是我在后端目录中的 index.js 文件,.env 文件与 index.js 在同一目录中。


// backend/index.js

const express = require("express");
const mongoose = require("mongoose");
const dotenv = require("dotenv");
const app = express();
const pinRoute = require("./routes/pins");
const userRoute = require("./routes/users");
const path = require("path")

dotenv.config();

app.use(express.json());
const uri = process.env.MONGO_URL;
console.log(uri)

// console.log does show uri.

mongoose
  .connect(uri, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true
  })
  .then(() => {
    console.log("MongoDB Connected :)");
  })
  .catch((err) => console.log(err));

app.use("/api/pins", pinRoute);
app.use("/api/users", userRoute);

if (process.env.NODE_ENV === "production") {
  app.use(express.static("frontend/build"));

  app.get("*", (req, res) => {
    res.sendFile(path.resolve(__dirname, "../frontend", "build", "index.html"))
  })
}

const port = process.env.PORT || 8800;

app.listen(port, () => {
  console.log(`Backend server is running at ${port} :)`);
});

这是我的 package.json


// this is in the root directory.

{
  "name": "backend",
  "version": "1.0.0",
  "main": "backend/index.js",
  "license": "MIT",
  "engines": {
    "node": "14.15.4",
    "yarn": "1.22.10"
  },
  "scripts": {
    "start": "node backend/index.js",
    "backend": "nodemon backend/index.js",
    "frontend": "cd frontend && yarn start",
    "heroku-postbuild": "cd frontend && yarn install && yarn build ",
    "build": "cd frontend && yarn build"
  },
  "dependencies": {
    "bcrypt": "^5.0.1",
    "dotenv": "^9.0.2",
    "express": "^4.17.1",
    "mongoose": "^5.12.8",
    "nodemon": "^2.0.7"
  }
}

This is the error I get ...

【问题讨论】:

    标签: reactjs mongodb heroku deployment mern


    【解决方案1】:

    1.尝试使用环境变量名作为mongoose.connect的参数,看看是否有效。您不需要像之前那样将值分配给 uri 常量。

        mongoose
      .connect(process.env.MONGO_URL, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        useCreateIndex: true
      })
      .then(() => {
        console.log("MongoDB Connected);
      })
      .catch((err) => console.log(err));
    
    1. 您可以添加一个路由到您的基本 URL,当您点击该路由时会给出响应。

      app.get("/", (req, res) => {
      res.send("Default Route Works!");
      })
      

    编辑:

    将其添加到中间件下方的 app.js 中,并在您重定向到时添加

    http://localhost:PORT/
    eg. http://localhost:8080/    GET Request
    

    您应该会看到消息“默认路由有效!”屏幕上。或者,您可以通过 Insomnia 或 POSTMAN 等 API 客户端向同一端点发送 GET 请求。

    注意:请将您的端口号更改为 localhost 地址中的 PORT。

    【讨论】:

    • 你得到的错误是由一个名为 Pins.js 的文件中的 .map 函数引起的,它似乎与你提到的 mongoose.connect 问题无关。你可以在这里找到更多关于 Javascript .map 函数的信息link
    猜你喜欢
    • 2018-12-18
    • 2021-03-03
    • 2021-05-14
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 2020-08-01
    相关资源
    最近更新 更多