Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我从localhost离开后,CORS会发出问题-->;赫罗库_Node.js_Reactjs_Express_Heroku_Axios - Fatal编程技术网

Node.js 我从localhost离开后,CORS会发出问题-->;赫罗库

Node.js 我从localhost离开后,CORS会发出问题-->;赫罗库,node.js,reactjs,express,heroku,axios,Node.js,Reactjs,Express,Heroku,Axios,我有一个聊天应用程序,我的客户端用Reactjs编写,后端用Nodejs/Express编写。当我使用localhost:3000作为客户端,localhost:5000作为服务器时,我需要cors和后端的所有东西,整个应用程序工作得非常好。然后,我将服务器部署到heroku,将客户端部署到netlify,现在每当我尝试使用POST请求(也使用axios)登录时,都会出现此CORS错误: 在chrome上的网络标签下,我得到两件东西,一个“登录”有204个,它可以工作,然后一个“登录”只是说错

我有一个聊天应用程序,我的客户端用Reactjs编写,后端用Nodejs/Express编写。当我使用localhost:3000作为客户端,localhost:5000作为服务器时,我需要cors和后端的所有东西,整个应用程序工作得非常好。然后,我将服务器部署到heroku,将客户端部署到netlify,现在每当我尝试使用POST请求(也使用axios)登录时,都会出现此CORS错误:

在chrome上的网络标签下,我得到两件东西,一个“登录”有204个,它可以工作,然后一个“登录”只是说错误

这就是我的后端在Nodejs/express中的样子:

require('dotenv').config()

const http = require('http');

const cors = require('cors');
const hostname = '127.0.0.1';
const port = process.env.PORT || 5000;
const express = require('express');
const jwt = require('jsonwebtoken')
const cookieParser = require('cookie-parser');

const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const {AddUser, FindUser, RemoveUser, FindId} = require('./users.js')


var corsOptions = {
    origin: ['http://localhost:3000', 'https://easytalkchat.netlify.app'],
    credentials: true,
    methods: ['GET', 'POST', 'OPTIONS', 'PUT', 'DELETE'] };
app.use(cors(corsOptions));

app.use(express.json())

app.use(cookieParser());

//Tells the server what port to listen to and can add a function to talk to command line
server.listen(port, () => {
  console.log("Server is up!");
});
我认为可能的问题是,可能我没有使用https设置服务器,因为我使用http进行设置。也许这是问题的原因,但我不知道如何解决它。其他人也提到,这可能不是CORS的问题,而是Heroku的问题,因为Heroku只安装devdependency或类似的东西,但我也不知道如何解决这个问题。 我尝试过添加标题、凭据等,但我不知道

我的前端看起来像这样:

const signIn = (e) => {
    e.preventDefault();
    axios.post('https://easytalkchatapp.herokuapp.com/signin', {
      username: username,
      password: password
    }).then(res => {
...
我在顶部写了
axios.defaults.withCredentials=true


再重申一下,如果我真的去终端,在localhost:5000而不是heroku上运行我的服务器,并通过localhost:500服务器发出所有POST/GET请求,那么它完全可以正常工作。但是,如果我在localhost:3000上运行我的客户机,并且让服务器为heroku,那么它会崩溃,因此最确定的问题是heroku和我如何使用它。

因为您使用的是withCredentials,所以我认为最好为origin提供特定的值,而不是true或'*',因为它不能与凭据true一起工作

尝试使用以下选项:

var corsOptions = {
    origin: ['http://localhost:3000', 'https://easytalkchat.netlify.app'],
    credentials: true,
};

我希望它能有所帮助。

因为您使用的是withCredentials,所以我认为最好为origin提供特定的值,而不是true或“*”,因为它不能与凭据true一起使用

尝试使用以下选项:

var corsOptions = {
    origin: ['http://localhost:3000', 'https://easytalkchat.netlify.app'],
    credentials: true,
};

我希望它能有所帮助。

如果您使用
with credentials=true
并且当您从localhost运行前端和后端时,它运行得非常完美,因为它们位于同一个来源

但如果您在这段时间内从不同的来源(主机)运行前端和后端,则会出现cors问题。要解决此问题,您必须在后端将前端原点列入白名单

var corsOptions = {
    origin: ['http://localhost:3000', 'https://easytalkchat.netlify.app'],
    credentials: true,
};

通过这种方式,后端现在信任前端原点

如果您使用
with credentials=true
,并且当您运行前端和后端时都形成本地主机,因为它们位于同一原点,所以它可以完美地运行

但如果您在这段时间内从不同的来源(主机)运行前端和后端,则会出现cors问题。要解决此问题,您必须在后端将前端原点列入白名单

var corsOptions = {
    origin: ['http://localhost:3000', 'https://easytalkchat.netlify.app'],
    credentials: true,
};

通过这种方式,后端现在信任前端源

结果证明,后端代码完全是我自己的错。我使用的是process.env.(variable),但我从未在heroku配置变量中指定过它,所以在尝试访问它时,它一直处于中断状态。啊。谢谢大家。

事实证明,我的后端代码完全是我自己的错。我使用的是process.env.(variable),但我从未在heroku配置变量中指定过它,所以在尝试访问它时,它一直处于中断状态。啊。谢谢大家。

不幸的是,这不起作用,但我非常感谢你们的回复。我还是会犯同样的错误。我认为origin:true很好,因为如果我从localhost:5000而不是heroku运行我的服务器,origin:true可以工作。不幸的是,这不起作用,但我非常感谢您的回复。我还是会犯同样的错误。我认为origin:true很好,因为如果我从localhost:5000而不是heroku运行我的服务器,origin:true可以工作。我尝试了这个方法,但仍然得到相同的错误:(感谢您的回复,我只是检查了您的网站,没有出现任何错误。您可以登录并注册吗?这不允许我。注册尚未完成,但如果我使用相同的数据两次,则表明我已注册。因此,您有一些后端问题。完成注册后,您不会发送任何回复。)ponse.请再次检查您的代码奇怪的是,我正在发送响应,并且它在本地主机上运行完全正常,因此我不认为这是后端问题。我尝试了此操作,但仍然收到相同的错误:(感谢您的回复,我只是检查了您的网站,没有出现任何错误。您可以登录并注册吗?这不允许我。注册尚未完成,但如果我使用相同的数据两次,则表明我已注册。因此,您有一些后端问题。完成注册后,您不会发送任何回复。)ponse。请再次检查您的代码。奇怪的是,我正在发送一个响应,并且它在本地主机上运行完全正常,所以我不认为这是后端问题