BetterFrame/nodered/src/_http-body.js
Mitchell R 5b380d4694 fix(nodered): parse JSON body in trigger nodes
RED.httpNode.post registers a raw express route with no body parser, so
req.body was undefined and trigger payloads showed all fields null. Add
a zero-dep readJsonBody helper that streams + parses req body.
2026-05-13 03:07:22 +02:00

25 lines
830 B
JavaScript

/**
* Tiny JSON body reader for trigger nodes.
*
* RED.httpNode.post(path, handler) registers a raw Express route with no
* body parser, so req.body is undefined. Trigger nodes call readJsonBody(req)
* to get a parsed object (or {} on error / non-JSON).
*
* Zero dependencies — avoids relying on Node-RED's bundled body-parser being
* resolvable from our nodesDir.
*/
function readJsonBody(req) {
return new Promise((resolve) => {
if (req.body && typeof req.body === "object") return resolve(req.body);
let data = "";
req.setEncoding("utf8");
req.on("data", (c) => { data += c; });
req.on("end", () => {
if (!data) return resolve({});
try { resolve(JSON.parse(data)); } catch { resolve({}); }
});
req.on("error", () => resolve({}));
});
}
module.exports = { readJsonBody };