我是Web开发的新手,我有一个托管服务,我想在上面部署我的reactjs / node项目。要以前部署它,我只是上传了通过运行npm run build
创建的build文件夹。此后,我使用MERN堆栈向mongodb数据库添加了连接。
该项目最初是使用create-react-app创建的,然后按照本教程https://appdividend.com/2018/11/11/react-crud-example-mern-stack-tutorial/设置了后端节点/ mongodb。我所有的服务器代码都包含在api文件夹的project文件夹中。
通过运行npm start
,nodemon server.js
(来自api文件夹)并连接到终端中的mongodb,我可以在本地主机上运行项目。当我尝试以与以前相同的方式从托管服务运行它时,它说它无法连接到数据库,我认为这是由于该连接未在我的计算机上打开。
当前,所有API调用都使用axios张贴到http://localhost:4000/,我还假定这在服务器上将不起作用。我已经在网上寻找有关部署MERN堆栈的信息,但是我发现的所有对象都讨论了在AWS EC2上进行托管的问题,这不是我要做的。
我将如何部署到托管服务? 我应该寻找任何参考或地方吗?
编辑:我已经使用MongoAtlas连接到数据库,所以我使用的是SRV地址。我认为问题是使用本地地址的axios帖子,因为服务器上的应用程序仅在本地计算机上运行nodemon时才起作用。我应该用什么地址代替这个地址?
答案 0 :(得分:0)
当前,所有API调用都使用axios帖子发布到http://localhost:4000/,我还假定这在服务器上将不起作用。
您是正确的,这是行不通的。这是因为,如果用户获得了您的 React应用,则所有API调用都将重定向到他们的localhost
。哪个不包含您的API
当我尝试以以前的方式从托管服务运行它时,它说它无法连接到数据库,我认为这是由于该连接在我的计算机上未打开。
>
那可能是因为MongoDB URL可能仍设置为'mongodb://localhost:27017/myapp
之类的东西。这里有2个主要选项。
localhost
URL一起使用我一直在网上寻找有关部署MERN堆栈的信息,但是我发现的所有对象都讨论了在AWS EC2上托管的问题,这不是我要做的。
由于您使用的是MongoDB Atlas,请确保将服务器的IP地址列入白名单
答案 1 :(得分:0)
是的,是的,您将必须在托管服务器(已经建立)中部署服务。 您可以查看多种解决方案 有 Digital Ocean (数字海洋)
how to setup nodejs app for prod
how to install mongodb on ubuntu
还有Heroku。为此,这里有完整的教程
prepare and deploye mern stack。
正如我所说,除了这些以外,还有多种解决方案。希望这会有所帮助
答案 2 :(得分:0)
在前端,您需要设置一个axios配置,该配置将根据运行环境指向正确的URL:
utils / axiosConfig.js (我喜欢使用名称app
使其与express
保持内联,但是您可以为它起任何名字)
import axios from 'axios';
const env = process.env.NODE_ENV; // current environment
export const app = axios.create({
baseURL:
env === 'production'
? 'http://example.com/api/' // production
: 'http://localhost:5000/api/', // development
});
然后,无论您在哪里进行API调用,都可以利用此配置:
import { app } from '../utils/axiosConfig.js';
app.get("example");
app.post("example");
...etc
现在,它可以将请求发送到http://localhost:5000/api/example
或http://example.com/api/example
。
在您的client
package.json中,您可以指定环境:
"scripts": {
"start": "NODE_ENV=development webpack-dev-server",
"build": "NODE_ENV=production webpack",
"stage": "NODE_ENV=staging webpack",
"test": "NODE_ENV=testing jest --watchAll --coverage",
},
答案 3 :(得分:0)
TLDR;
为了运行基于 nodejs 的应用程序,您需要拥有自己的服务器。
详情
您可能已经共享的托管计划,其中大部分不提供几个第三方和开源项目。 (或者的NodeJS码头工人)
有关启动,我建议寻找到
如何可以得到一个管理VPS(虚拟专用服务器)提供Docker容器。将您的应用程序包装在 docker 容器中并将其上传到您的服务器。 (亚马逊,天青等)。
其他更便宜的选择是获得一个非托管的VPS,你就必须自己安装操作系统,安装依赖,DB,防火墙等)。不要被它们的名字吓着了。
购买一台专门的服务器,安装所需的所有东西,您的域名申请一个静态IP指向您的静态IP地址。
第三个选项是可扩展的,从长远来看更便宜,但它是个好东西,了解服务器及其并发症的几件事情。