You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node-RED Websocket CORS策略异常:Angular访问跨域错误求助

解决Node-RED与Angular Websocket跨域+404错误

你的错误包含两个核心问题:跨域(CORS)限制和HTTP 404资源未找到,咱们一步步来搞定:

一、先处理跨域(CORS)问题

Node-RED v0.18.2需要手动配置CORS中间件,操作步骤如下:

  1. 安装cors依赖包
    打开终端,进入Node-RED的用户目录(一般是~/.node-red,Windows系统为C:\Users\<你的用户名>\.node-red),执行命令:
npm install cors --save
  1. 修改Node-RED的settings.js配置文件
    找到文件中的httpNodeMiddleware配置项(如果没有就手动添加),替换为以下内容:
var cors = require('cors');
// ...
httpNodeMiddleware: function(req, res, next) {
    // 仅允许Angular所在的域名跨域请求(开发环境用)
    cors({origin: "http://localhost:4200", credentials: true})(req, res, next);
},

如果是开发测试阶段需要允许所有域名访问,可以把origin设为*:

cors({origin: "*", credentials: true})(req, res, next);

二、解决404资源未找到错误

错误里的404说明Angular请求的/socket.io路径在Node-RED端无法匹配,需要从两方面排查:

1. 配置Node-RED的Socket.IO跨域规则

在settings.js中找到socketio配置项(没有则添加),确保开启并设置正确的跨域来源:

socketio: {
    origins: "http://localhost:4200:*",
    // 测试环境允许所有来源可写为 "*:*"
},

2. 检查Angular端的连接代码

确保你在Angular中使用了正确的连接地址,示例代码如下:

import { io } from 'socket.io-client';

// 连接Node-RED的Socket.IO服务
const socket = io('http://localhost:1880', {
    transports: ['polling', 'websocket'], // 匹配错误日志里的传输类型
    withCredentials: true // 需与Node-RED的cors配置中credentials参数保持一致
});

注意:不要在连接地址后额外拼接/socket.io,socket.io-client会自动处理这个路径。

三、重启Node-RED服务

修改完settings.js后,必须重启Node-RED才能让新配置生效。

验证

重启服务后,再次从Angular发起连接,应该就能同时解决跨域和404问题了。如果仍有异常,可以检查:

  • Node-RED的启动日志,看是否有配置加载报错
  • Angular端的控制台,查看是否有新的错误提示

内容的提问来源于stack exchange,提问作者bashkan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:58:45