在 Heroku 上部署了应用程序,但无法从中访问 mongoDB

Deployed app on Heroku, but can't access mongoDB from it

我在 Heroku 上部署了我的第一个 MERN 堆栈应用程序,它基本上是一个酒类库存管理器。

但是无法访问数据库。每当我拨打 Axios 电话时,我的请求都会被拒绝。我今天浪费了 7 个小时试图修复它,但无济于事。感谢任何帮助。

这是我的server.js

const express = require('express')
const dotenv = require('dotenv').config()
const connectDB = require('./config/db')
const {errorHandler} = require('./middleware/errorMiddleware')
const port = process.env.PORT || 5000
const app = express()
const path = require('path')
const cors = require('cors')
const mongoose = require('mongoose')

connectDB()

app.use(express.json());
app.use(cors());

app.use('/api/users', require('./routes/userRoutes'))
app.use('/api/inventory', require('./routes/inventoryRoutes'))
app.use('/api/weekly', require('./routes/weeklyRoutes'))

mongoose.connect( process.env.MONGODB_URI, { useNewUrlParser: true })

// Serve frontend
if (process.env.NODE_ENV === 'production') {
    app.use(express.static(path.join(__dirname, '../frontend/build')))
  
    app.get('*', (req, res) =>
      res.sendFile(
        path.resolve(__dirname, '../', 'frontend', 'build', 'index.html')
      )
    )
  } else {
    app.get('/', (req, res) => res.send('Please set to production'))
  }
app.use(errorHandler)

app.listen(port, () => {
    console.log(`Server up on ${port}`)
})

这是我的package.json

{
  "name": "stockify-inventory-manager",
  "version": "1.0.0",
  "description": "Manage your Alcohol Inventory easily",
  "main": "server.js",
  "scripts": {
    "start": "node backend/server.js",
    "server": "nodemon backend/server.js",
    "client": "npm start --prefix frontend",
    "dev": "concurrently \"npm run server\" \"npm run client\"",
    "heroku-postbuild": "NPM_CONFIG_PRODUCTION=false npm install --prefix frontend && npm run build --prefix frontend"
  },
  "author": "Steve Yoo",
  "license": "MIT",
  "dependencies": {
    "bcryptjs": "^2.4.3",
    "bootstrap": "^5.1.3",
    "colors": "^1.4.0",
    "cors": "^2.8.5",
    "dotenv": "^16.0.0",
    "express": "^4.17.3",
    "express-async-handler": "^1.2.0",
    "font-awesome": "^4.7.0",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^6.2.3",
    "react-router-dom": "^6.2.1"
  }
}

以下是我尝试过的清单:

  1. mongoDB 上的白名单 IP 为 0.0.0.0/0
  2. 仔细检查来自 mongoDB 的连接字符串及其在 .env
  3. 中的设置方式
  4. 检查是否有任何项目卡在 devdependencies 而不是 dependencies
  5. 仔细检查我的 Heroku 配置变量并确保它们匹配 .env
  6. 更新nodejs到最新

是的,这在本地运行良好。

编辑:在 heroku local 上测试一些东西时,我注意到后端 运行 本地导致部署的应用程序按预期工作。但是,一旦我终止本地,它就无法再次访问数据库。似乎后端在部署时甚至没有启动 运行。仍然不知道....任何帮助表示赞赏

EDIT2:添加了错误截图。enter image description here

我认为错误屏幕截图在这里会有很大帮助,因为我不知道你得到的是哪种错误,你说你无法连接到数据库然后 尝试添加你的 Heroku域到 MongoDB 允许的域

此外,我看到您在 heroku-postbuild 脚本中使用了 npm install,但您不必这样做,因为只要您将代码推送到 heroku,它就会自动 运行 npm install.