我的 MERN 应用程序部署在 Namecheap / cPanel 上,但它没有访问 Mongo Atlas DB 问题详情

问题描述

问题

我的应用托管在 Namecheap 共享主机上,但它没有连接到我的 Mongo Atlas 数据库

详情

我对此很陌生,只部署到 Heroku。一开始我尝试使用它们,但我不知道如何使用 S3 进行图像文件上传/检索。

所以我正在尝试 Namecheap。

无论如何在 cPanel 文件目录中,我的应用程序位于:npm run build

我还在本地运行了 /build/ 命令,并将新创建的 /home/username/public_html 目录的内容放入 cPanel 的 server.js

我几乎可以肯定它不必那样做,但到目前为止,这是让我的实际网站在浏览器上呈现的唯一方法

我使用 cPanel 的“Setup NodeJS App”菜单来安装我的应用程序,并将“Application Starter File”设置为 const mongoose = require('mongoose'); const express = require('express'); const app = express(); const dotenv = require('dotenv'); const cors = require('cors'); const path = require('path'); // Activate dotenv for secure keys dotenv.config(); // Middleware to recognize incoming Request Object as a JSON object app.use(express.json()); // Local file storage app.use('/uploads',express.static('uploads')); // Bind Routes const commissions = require('./routes/api/commissions'); const projects = require('./routes/api/projects'); const users = require('./routes/api/users'); // Use Routes app.use(cors()); app.use('/commissions',commissions); app.use('/projects',projects); app.use('/users',users); // Mongo connect mongoose .connect(process.env.URI || process.env.MONGO_URI,{ useNewUrlParser: true,useUnifiedTopology: true,useCreateIndex: true }) .then(() => console.log("Connected to MongoDB")) .catch(err => console.log(err)); // For Deployment if(process.env.NODE_ENV === 'production') { app.use(express.static(path.join(__dirname,'client','build'))); app.get('*',(req,res) => { res.sendFile(path.join(__dirname,'build','index.html')); }); }; // Run server const port = process.env.PORT || 5000; app.listen(port,() => console.log(`Server started on port ${port}`));

我的 server.js 文件

npm install

我在 cPanel 中运行了 NPM 安装(以及我的 package.json 中的一个脚本来在客户端运行 0.0.0.0/0),希望这两者都能使我的应用程序能够正常工作(就像在开发中一样)。

我还检查了我的 Mongo Atlas IP 白名单,但它已经允许 void PendSV_Handler(void) { __asm__("cpsid i"); //if(OS_curr != (OSThread *)0) __asm__("ldr r0,=OS_curr"); __asm__("ldr r0,[r0]"); __asm__("cbz r0,PendSV_restore"); // Push r4 - r11 __asm__("PUSH {r4-r11}"); __asm__("ldr r1,=OS_curr"); __asm__("ldr r1,[r1]"); // OS_curr -> sp = sp; __asm__("str sp,[r1]"); PendSV_restore: // sp=OS_next -> sp; __asm__("ldr r0,=OS_next;"); __asm__("ldr r0,[r0]"); __asm__("ldr r0,[r0]"); __asm__("str sp,[r13]"); // OS_curr = OS_next; __asm__("ldr r0,=OS_next"); __asm__("ldr r1,[pc,0xc]"); __asm__("ldr r0,=OS_curr"); __asm__("str r0,[r1]"); //Pop r4-r11 __asm__("POP {r4-r11}"); // __enable_interrupts(); __asm__("cpsie i"); //return to next thread __asm__("bx r14"); } (来自我的 heroku 部署)。

此外,namecheap 支持人员为我打开了端口 5000,(我在另一个论坛上读到这是解决类似问题的人的解决方案),但这对我也不起作用。

解决方法

解决者:

  • 将我的共享主机 IP 地址(位于 cPanel 中)添加到 Mongo Atlas IP 白名单

  • 联系 cPanel 支持并让他们打开适当的后端端口

  • 在 cPanel 的“设置 NodeJS 应用”菜单上更改我的应用的 NodeJS 版本

最重要的是 Node 版本。 Node 有很多版本,但截至本文,cPanel 只有以下 Node Version 选项:

12.19.1
11.15.0
10.22.0
9.11.2
8.17.0
6.17.1

我的特定版本不是这些,所以我被告知只选择可用的最高版本。但这就是断开与我的 Mongo Atlas DB 的连接的原因。

我测试了这些选项中的每一个,有效的是 8.17.0