此问题已在此处有答案:
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上管理这种本地调用。
1条答案
按热度按时间rn0zuynd1#
跳过cors问题的简单方法是在express服务器上安装cors包,并像这样使用它,并将其添加到express中间件和路由的顶部:
默认情况下,它修复必须标准的CORS问题,但你可以给予选项作为CORS函数的对象。