我的应用程序托管在 Namecheap 共享主机上,但它无法连接到我的 Mongo Atlas DB。
我对此很陌生,并且只部署到 Heroku。 我一开始尝试使用它们,但我不知道如何使用 S3 上传/检索图像文件。
所以我正在尝试 Namecheap。
无论如何,在cPanel文件目录中,我的应用程序位于:
/home/username/repositories/myapp
我还在本地运行了
npm run build
命令,并将新创建的 /build/
目录的内容放入 cPanel 的 /home/username/public_html
中
我几乎可以肯定,不必这样做,但到目前为止,这是唯一能让我的实际网站在浏览器上呈现的方法。
我使用 cPanel 的“Setup NodeJS App”菜单来放置我的应用程序,并将“Application Starter File”设置为
server.js
我的server.js文件
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, 'client', 'build', 'index.html'));
});
};
// Run server
const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Server started on port ${port}`));
我在 cPanel 中运行了 NPM 安装(以及我的 package.json 中的脚本以在客户端运行
npm install
),希望这两者都能使我的应用程序正常工作(就像在开发中一样)。
我还检查了我的 Mongo Atlas IP 白名单,但它已经允许
0.0.0.0/0
(来自我的 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
。
将数据库托管在云服务器(如 mongo db atlas)上的最佳解决方案,将您的主机地址添加到允许的 IP 地址列表中,然后可能使用 mongoose 将我连接到您的项目