NodeJS CORS地狱正在阻止我推进个人项目[复制]

ddrv8njm  于 2023-10-17  发布在  Node.js
关注(0)|答案(1)|浏览(113)

此问题已在此处有答案

How to enable cors nodejs with express?(10个答案)
18小时前关闭
我只是想在计算机和Raspberry Pi之间创建一个连接。在人们开始和我谈论互联网安全和其他东西之前,超级重要的序言要理解。不,我正在建造的这个东西永远不会在网上自由连接。
在Pi上,我正在运行一个NodeJS服务器,它旨在接收POST以触发Pi的GPIO上的一些东西。
在另一台计算机上,我正在运行一个具有触发请求的UI的Web页面。
基本流程图:

COMP -> fetch() ===> PI -> GPIO

一切都可以运行良好,但我不能设法达到Pi服务器,因为CORS。我并不想理解CORS(请不要给予我一个关于网络安全或其历史的讲座,我经常在教程中看到这一点,这不是我想要的)。
我试图找出在发送请求或Pi服务器处理请求时我没有正确设置的参数。
从前端JS摘录:

function postState(value) {
  const options = {
    method: 'POST',
    body: JSON.stringify({ state: value }),
    headers: {
      'Content-Type': 'application/json'
    },
  };

  fetch(TOGGLE_URL, options)
    .then(res => res.json())
    .then(res => console.log(res))
    .catch(err => console.error(err));
}

以下是到目前为止的服务器JS:

require('dotenv').config();

const express = require('express');
const app = express();

const port = process.env.API_PORT;

// api
app.post('/toggle', (req, res) => {
  const state = req.query.state;
  console.log('state from body:', state);

  res.writeHead(
    200,
    {
      'Access-Control-Allow-Origin': '*',
      'Access-Control-Allow-Headers': '*',
      'Access-Control-Request-Method': 'GET,POST',
    }
  );
});

// setup + startup
app.use(express.json());

app.listen(port, () => {
  console.log(`Listening on port ${ port }`);
});

在此,谨以简单的语言,提前感谢您的提示和指导。
编辑:我更正为app.post
向提出问题的人提供详细信息:
问:“也许你至少给我们一个实际的CORS错误消息?“- CBroe
好建议:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://192.168.68.75:6464/toggle. (Reason: CORS request did not succeed). Status code: (null).
问:“您在服务器中的何处启用/配置CORS?“-普雷拉克索拉
答:我不是一个服务器/后端的人,因此我可能不知道如何做到这一点。这可能福尔斯我的问题中的“我试图弄清楚我没有正确设置哪些参数..”。我试着阅读关于这方面的js,但无法理解任何关于这方面的教程。因此,我请求人类的帮助。
如果有人看到这一部分,我设法让它工作,可能要感谢Lowsec-code的建议,使用

const cors = require('cors');
app.use(cors());

问题似乎是使用Firefox作为浏览器来调用API,因为当我尝试使用Safari和Chrome时,它们都设法调用了服务器,并且没有得到错误。无论你如何改变about:config,都无法在Firefox上管理这种本地调用。

rn0zuynd

rn0zuynd1#

跳过cors问题的简单方法是在express服务器上安装cors包,并像这样使用它,并将其添加到express中间件和路由的顶部:

const cors=require("cors")

app.use(cors())

默认情况下,它修复必须标准的CORS问题,但你可以给予选项作为CORS函数的对象。

相关问题