因此,我刚刚使用React,NodeJS,Express.JS和SocketIO创建了简单的聊天应用程序。我要在Heroku上部署它。
问题是我不确定我是否可以在同一URL上同时运行前端和后端。当我第一次在本地创建此聊天时,我在localhost:3000上运行了前端(默认为Create-React-App),在localhost:8000上运行了后端。
对于前端,我是在外部API.js文件中这样做的:
import io from 'socket.io-client';
let socket;
export const api = {
open: () => {
socket = io('http://localhost:8000');
}
}
对于后端,我这样做是这样的:
let express = require('express');
let io = require('socket.io')(8000);
因此,您看到它们都在不同的端口上。在我的计算机上,它运行良好。我不确定它们是否可以在同一端口上本地工作(如果我尝试将后端侧的8000端口切换到端口3000,很遗憾,它无法正常工作-前端和后端无法在同一端口上工作,则会发生HTTP 404错误)。
我的问题是:有什么理由/是否有可能将其放在同一端口上?因为这是问题2:
我尝试将其部署在heroku上,对于前端,我已经将Heroku Buildpack用于create-react-app,并且运行良好,但完全不知道如何使用它来部署服务器-侧。我应该为后端创建单独的heroku地址吗?并且,在上面的代码中,更改路径,例如:
let socket;
export const api = {
open: () => {
socket = io('http://myherokuaddress');
}
}
和
let express = require('express');
let io = require('socket.io')(http://myherokuaddress);
?
答案 0 :(得分:0)
在heroku中,您无法手动定义端口。使用此代码代替端口8000。
process.env.PORT
答案 1 :(得分:0)
您可以执行Zenith所说的,但是,最佳实践是对前端和后端代码使用不同的服务器,这样您就可以构建使用相同后端代码的模式前端应用程序。而且,如果由于某种原因您的前端服务器已关闭,则只需要在其他位置托管前端代码,并且仍使用相同的后端即可。