让我的React前端与我的Express服务器通话

所以我有一个运行Apache,Node和Mongo的Digital Ocean Ubuntu VPS。 我可以通过服务器上的CURL从我的数据库返回数据。 节点后端肯定在端口3000上运行。

我的React前端使用Fetch,我现在指向localhost:3000。 这是错的吗?

我也有点困惑,我的前端React包应该在我的server.js服务器上。 那很重要吗?

我可以通过我的域访问前端,它不是像我在本地工作时那样抓取数据。 我必须在我的server.js中丢失一些东西来让他们相互交stream

我阅读了关于Apache VirtualHost以及如何可能成为在单个Apache服务器上运行节点应用程序的必要组件。让我知道,如果你知道一件事或两件事。

这里是前端的httpservice.js文件:

var Fetch = require('whatwg-fetch'); var baseUrl = 'http://localhost:3000'; var service = { get: function(url) { return fetch(baseUrl + url) .then(function(response) { return response.json(); }); }, post: function(url, ingredient) { return fetch(baseUrl + url, { headers: { 'Accept': 'text/plain', 'Content-Type': 'application/json' }, method: 'post', body: JSON.stringify(ingredient) }).then(function(response) { return response; }); } }; module.exports = service; 

这里是我的后端server.js:

 var express = require('express'); var mongoose = require('mongoose'); var Schema = mongoose.Schema; var bodyParser = require('body-parser'); var app = express(); mongoose.connect('mongodb://admin:admin123@127.0.0.1:27017/food?authSource=admin'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: false})); var usersSchema = new Schema({ // _id: String, id: String, vote: Number }); var bkyes = mongoose.model('bkyes', usersSchema); app.get('/bkyes', function(req, res) { bkyes.find({}, function(err, bkyes) { res.send(bkyes); }); }); app.listen(3000); 

非常感谢任何见解,欢迎和欣赏!

我select了安装了基本防火墙的预configuration数字海洋服务器。 由于我的应用程序在端口3000上运行,它阻止了GET和POST请求。 我通过在我的服务器上运行它来修复它:

 sudo ufw allow 3000 

另外在我的httpservice.js文件中,我更改了var baseUrl = 'http://localhost:3000'; 至:

 var baseUrl = 'http://MY_SERVER_IP:3000'; 

你的服务器在你的本地机器上吗? 否则,我认为你应该把域名或其IP地址在baseURL 。 实际上,当你访问你的前端时,由React生成的js脚本是由你的浏览器在本地机器上执行的。 所以它试图访问您的计算机上的端口3000。 但是你的节点后端仍然在你的服务器上。