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

如何在Deno Fresh中获取Node-RED POST请求的msg.payload数据

解决Deno Fresh POST处理器无法获取Node-RED请求数据的问题

问题出在你直接获取了req.body,它本身就是一个ReadableStream对象,并非实际的请求数据。要拿到Node-RED发送的msg.payload数据,需要根据请求的Content-Type选择对应的解析方法:

常见解析方式

  • 如果Node-RED发送的是JSON格式数据(默认通常是这个),使用req.json()方法解析
  • 如果是表单数据或纯文本,使用req.text()方法解析,之后可再按需转换格式

修改后的处理器代码

解析JSON数据的情况

import { Handlers, HandlerContext } from "$fresh/server.ts";

export const handler: Handlers = {
    async POST(req: Request, ctx: HandlerContext){
        // 解析JSON格式的请求体
        const payload = await req.json();
        console.log(payload); // 这里就能拿到Node-RED发送的msg.payload数据了
        return new Response(JSON.stringify(payload), {
            headers: { "Content-Type": "application/json" }
        });
    }
};

解析文本/表单数据的情况

import { Handlers, HandlerContext } from "$fresh/server.ts";

export const handler: Handlers = {
    async POST(req: Request, ctx: HandlerContext){
        // 解析纯文本或表单格式的请求体
        const payloadText = await req.text();
        console.log(payloadText);
        // 如果是表单数据,可进一步解析:const payload = new URLSearchParams(payloadText);
        return new Response(payloadText);
    }
};

额外注意事项

  • 确保Node-RED的POST请求里设置了正确的Content-Type头,比如JSON格式对应application/json,表单对应application/x-www-form-urlencoded
  • 如果请求体已经被读取过(比如之前调用过一次解析方法),ReadableStream会被锁定,无法再次读取,所以要避免重复解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:45:36