HEROKU 上的 CORS 问题

2024-01-22

我在 Heroku 上遇到 CORS 问题。

这是我在服务器上的代码

import express from 'express';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
require('dotenv').config()

import filmRoutes from './api/routes/films'
import userRoutes from './api/routes/users'

const app = express()

const DBNAME = process.env.DB_USER 
const DBPASSWORD = process.env.DB_PASS


mongoose.connect(`mongodb://${DBNAME}:${DBPASSWORD}@ds157422.mlab.com:57422/filmbase`, {useNewUrlParser: true})

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", '*');
  res.header("Access-Control-Allow-Credentials", true);
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json');
  next();
});

app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());

app.use('/films', filmRoutes)
app.use('/users', userRoutes)


export default app;

这是我的帖子请求

  CheckLogin = () => {
    const data = {
      name: this.state.formInput.login.value,
      password: this.state.formInput.password.value
    }
    axios.post('https://whispering-shore-72195.herokuapp.com/users/login', data)
    .then(response=>{
      console.log(response);
      const expirationDate = new Date(new Date().getTime() + response.data.expiresIn * 1000)
      localStorage.setItem('token', response.data.token)
      localStorage.setItem('expirationDate', expirationDate)
      this.context.loginHandler()
    })
    .catch(err=>{
      console.log(err)
    })

    console.log(data);
  }

这是错误

访问 XMLHttpRequest 'https://whispering-shore-72195.herokuapp.com/users/login https://whispering-shore-72195.herokuapp.com/users/login' 从原点 'https://mighty-citadel-71298.herokuapp.com https://mighty-citadel-71298.herokuapp.com' 已被 CORS 阻止 策略: 上不存在“Access-Control-Allow-Origin”标头 请求的资源。

我尝试了很多方法,但没有任何结果......有什么想法吗?


您已跨源域https://whispering-shore-72195.herokuapp.com https://whispering-shore-72195.herokuapp.com从原点https://mighty-citadel-71298.herokuapp.com https://mighty-citadel-71298.herokuapp.com

你可以试试npm cors 包 https://www.npmjs.com/package/cors作为中间件而不是您的自定义中间件。CORS包允许您进行多种配置,并且非常易于使用。

简单使用(启用所有 CORS 请求)

import express from 'express';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
import cors from 'cors';
require('dotenv').config()

import filmRoutes from './api/routes/films'
import userRoutes from './api/routes/users'

const app = express()

const DBNAME = process.env.DB_USER 
const DBPASSWORD = process.env.DB_PASS


mongoose.connect(`mongodb://${DBNAME}:${DBPASSWORD}@ds157422.mlab.com:57422/filmbase`, {useNewUrlParser: true})

/*app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", '*');
  res.header("Access-Control-Allow-Credentials", true);
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json');
  next();
});*/

app.use(cors()); // <---- use cors middleware

app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());

app.use('/films', filmRoutes)
app.use('/users', userRoutes)


export default app;

Edit:

我已经测试了您的客户端呼叫登录到您的服务器https并且它的工作没有 CORS 问题。也许你已经成功修复了它。

我尝试过简单的堆栈闪电战 https://stackblitz.com/edit/js-53876623?file=index.js并且它运行成功。

您可以尝试登录https://js-53876623.stackblitz.io/ https://js-53876623.stackblitz.io/并在检查时查看网络选项卡并查看OPTIONS (200 status) and POST (404 not found)(因为我不认识你数据库中的任何用户)

编辑 2018 年 12 月 22 日 - 晚上 7:18

我已经在本地尝试了您的代码,也许您没有测试并处理所有错误,不幸的是它使您的应用程序崩溃。

我已经运行了你的代码并注意到了这个问题jsonwebtoken error:

错误:secretOrPrivateKey 必须有一个值

请尝试使用process.env.JWT_KEY || 'Require key here!!!',,并设置你的JWT_KEY根据您的环境或使用情况||作为服务器上的默认密钥。

也许它会解决你的问题。

推荐:

我对您的代码有一些建议:

  • 请用User.findOne()代替User.find()
  • 请用app.use(cors());
  • jsonwebtoken应该使用异步而不是在服务器上运行时同步。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HEROKU 上的 CORS 问题 的相关文章

随机推荐

  • 如何制作响应式表格[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个表来表示 html 页面中的一些数据 我正在尝试使该表具有响应能力 我怎样才能做到这一点 这里是Demo http jsfid
  • 如何在Android中的DatePicker中仅阻止过去的日期

    如何在Android中的DatePicker中仅阻止过去的日期 我正在使用过去日期和当前日期被阻止的示例代码 我只需要阻止过去的日期 而不是当前日期 这是我的代码 private DatePickerDialog OnDateSetList
  • 向 React Native WebView 添加 CSS 样式

    所以我对此有点困惑 我在应用程序的一部分中使用了 WebView 使用 WebView 的原因是因为我们从返回给我们 HTML 字符串的 API 端点拉取 此 HTML 字符串中的字体大小和其他内容的样式不是为了在移动应用程序中使用而设计的
  • 即使使用 TLSHandshakeTimeShift 选项,TLS 过期的 Hyperledger Fabric orderer 也无法启动

    我的 Hyperledger Fabric 网络的 TLS MSP 密钥已在 500 多小时前过期 由于过期 我的订单在停止后无法重新启动 我的订购者设置是 超级账本 Fabric 版本 2 2 RAFT共识 根据文档 我设置了TLSHan
  • WebElement.equals() 方法如何检查相等性?

    我有超过 1 个 XPath 指向一个 Web 元素 并且我想确定这两个元素是否等效 即 如果我在两个 Web 元素上执行操作 sendKeys 或 click 则该操作将在同一个 Web 元素上执行 目前我正在使用以下方法检查相等性 We
  • 重定向到带有 auth 标头的 url

    我正在尝试重定向到受保护的资源 当我按下登录按钮时 它会发送到我未受保护的登录 api 并返回一个令牌 其他路由期望标头 授权 不记名令牌 类型的交易 但我不知道当我重定向到受保护资源时如何设置标头 console log success
  • TFS 2018 以编程方式创建代理池

    是否可以以编程方式 最好通过 PowerShell 在 TFS 2018 中创建代理池 我在 REST API 中找不到类似的东西 我不知道为什么它没有详细记录 但这对我来说对 VSTS 有效 token myPAT base64AuthI
  • 获取 UITextView 中滚动后可见文本的 NSRange

    我正在尝试将滚动文本的位置保存在UITextView这样我就可以在加载时返回到该位置ViewController再次 我有很长的字符串 所以我希望用户能够滚动到特定位置 然后稍后返回到该位置 我正在使用UITextView scrollRa
  • 有没有办法让 json.Unmarshal() 根据“type”属性选择结构类型?

    我有一些以下形式的 JSON type car color red hp 85 doors 4 type plane color blue engines 3 我有类型car and plane满足车辆接口 我希望能够写 var v veh
  • 如何在开始其他活动时保留 Tabhost

    我的 TabHost 有问题 我的 TabBarActivity 类流程为 公共类 TabBarActivity 扩展 TabActivity 实现 OnTabChangeListener non Javadoc see android a
  • IdentityServer - AD 用于身份验证,其余部分在 DB 中

    我已经设置了一个已启动并运行的基本 IdentityServer 我使用 Identity Manager 和 Identity Admin 将所有内容 用户 角色 声明 客户端 范围 保存在数据库中 下一步是将身份验证与 AD 集成 我的
  • Tensorflow 计算图像中的对象[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 机器学习新手 因此正在寻找如何入门的方向 最终目标是能够使用 Tensorflow 训练模型来计算图像中的对象数量 我最初的重点是训练
  • 使用 psql 时获取错误代码

    当我使用 psql exe 运行 SQL 脚本时 发生错误时没有收到错误代码 有什么方法可以获取 psql 错误代码吗 我尝试将 VERBOSITY 设置为 详细 如下所示 但没有用 set VERBOSITY verbose 我正在使用
  • SecurityTokenInvalidAudienceException:IDX10214:受众验证失败

    我正在使用 Identity 和 Sustainsys Saml2 用于 SAML 身份验证 开发 ASP NET Core 2 应用程序 我已在 Startup cs 文件中进行了必要的配置 现在 当我运行该项目并尝试使用 SAML2 登
  • 如何在 C# 中获取当前用户的 Active Directory 详细信息

    我正在开发一个使用 Windows 身份验证的 C 和 ASP Net 应用程序 即在 Web config 中
  • powershell远程安装msi失败

    我正在尝试使用 powershell 在远程服务器上安装 msi 文件 服务器 1 是我的构建服务器 服务器 2 是我的应用程序服务器 当构建服务器完成构建后 我想触发一个 powershell 脚本以将最新版本安装到我的应用程序服务器 我
  • 获取列表中的项目

    我有以下列表项 public List
  • 给定一个搜索词列表,我如何知道我的字符串包含哪些搜索词?

    有很多软件会采用搜索字符串并查找数据库中包含该字符串的所有文本 MySQL 的WHERE MATCH searchterm string column 谷歌等 但是有没有一个好的算法可以反其道而行之呢 假设我有一个搜索词列表 丰田普锐斯 丰
  • Rails 3.1 命名范围

    编写以下代码的Rails 3 1是什么 named scope min 2 items last 90 days include gt orders gt order items conditions gt orders created a
  • HEROKU 上的 CORS 问题

    我在 Heroku 上遇到 CORS 问题 这是我在服务器上的代码 import express from express import bodyParser from body parser import mongoose from mo