问题描述
问题
我的应用托管在 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
。