讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

剧云
剧云

中文短剧剧本制作平台

Seko
Seko

AI短剧一键生成成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

如何在 Node.js 后端正确解析 React 前端传来的 JSON 数据

浅涛姑娘_5788

浅涛姑娘_5788

发布时间:2026-02-27 12:23:07

|

264人浏览过

|

来源于php中文网

原创

如何在 Node.js 后端正确解析 React 前端传来的 JSON 数据

本文详解如何在 express(或类似 node.js)后端中正确提取前端通过 fetch 发送的 json 请求体中的目标字段(如合约地址),避免将整个对象误作字符串或未解构直接使用。

本文详解如何在 express(或类似 node.js)后端中正确提取前端通过 fetch 发送的 json 请求体中的目标字段(如合约地址),避免将整个对象误作字符串或未解构直接使用。

在前后端分离开发中,React 前端常通过 fetch 向 Node.js 后端发送结构化数据(如智能合约地址),而后端需精准提取该值以调用 Web3 相关逻辑(例如 ethers.js 读取链上价格)。但初学者常因请求体解析不当,导致后端收到的是完整 JSON 对象而非原始字符串值——正如问题中所示:{ feed: '0xD4a338...' },而非期望的纯地址字符串。

✅ 正确处理流程

1. 前端:确保发送格式规范(已正确)

你的前端代码是标准且合规的:

export async function getPrice() {
  const { feed } = useStore.getState();

  try {
    const response = await fetch("/api/getPrice", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({ feed }), // ✅ 发送 { feed: "0x..." }
    });

    const result = await response.json();
    console.log("Backend response:", result);
  } catch (error) {
    console.error("Fetch error:", error);
  }
}

✅ 关键点:JSON.stringify({ feed }) 将地址封装为合法 JSON 对象,符合 REST API 最佳实践。

2. 后端:必须显式解析请求体并解构

Node.js 默认不会自动解析 JSON 请求体。若你使用 Express,需手动启用 express.json() 中间件;否则 req.body 将为空或为原始流。

logos-node
logos-node

在 Linux x86_64 上安装、更新或检查 Logos 区块链测试网验证节点。用于用户需要搭建 Logos 节点时使用。

下载

立即学习“前端免费学习笔记(深入)”;

✅ Express 示例(推荐)
// server.js 或路由文件
const express = require('express');
const app = express();

// ? 必须启用 JSON 解析中间件
app.use(express.json()); // 解析 application/json
app.use(express.urlencoded({ extended: true })); // 可选:兼容表单提交

// 定义 /api/getPrice 路由
app.post('/api/getPrice', async (req, res) => {
  try {
    // ✅ 正确解构:req.body 是解析后的 JS 对象
    const { feed } = req.body; // ← 核心!从 { feed: "0x..." } 中提取字符串值

    // 验证非空 & 格式(防御性编程)
    if (!feed || typeof feed !== 'string' || !/^0x[a-fA-F0-9]{40}$/.test(feed)) {
      return res.status(400).json({ error: 'Invalid Ethereum address' });
    }

    console.log('Extracted feed address:', feed); // 输出:0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e

    // ✅ 此处可安全传入 ethers Contract 方法
    // const price = await contract.getPrice(feed);

    res.json({ success: true, address: feed, /* price */ });
  } catch (err) {
    console.error('Backend error:', err);
    res.status(500).json({ error: 'Internal server error' });
  }
});

⚠️ 常见错误:直接把 req 当作函数参数(如 exports.getPrice = async (feed) => {...})——这是无效的。Node.js HTTP 处理器接收的是 (req, res, next) 三元参数,feed 不会自动注入。

3. 其他框架适配提示

  • Next.js API Routes:req.body 已自动解析,直接 const { feed } = req.body 即可。
  • Fastify:需注册 fastify-json-body 插件或使用内置 schema 配置。
  • 原生 Node.js(无框架):需手动监听 data/end 事件拼接 Buffer 并 JSON.parse()。

? 调试技巧

  • 在后端入口加日志:console.log('Raw body:', req.body, typeof req.body);
  • 使用 Postman 测试接口,确认请求头含 Content-Type: application/json;
  • 检查 Express 版本:v4.16+ 才默认支持 express.json()。

✅ 总结

环节 正确做法 错误示例
前端 JSON.stringify({ feed }) + Content-Type: application/json 漏设 headers 或用 FormData 发送 JSON
后端中间件 app.use(express.json()) 忘记启用,导致 req.body === {}
数据提取 const { feed } = req.body 直接 console.log(req.body) 误以为 feed 是字符串

只要确保后端正确解析并解构请求体,你就能稳定获取到纯净的合约地址字符串,无缝对接 ethers.Contract 等链上操作。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

709

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

664

2025.12.18

ThinkPHP中间件机制与请求拦截处理实践
ThinkPHP中间件机制与请求拦截处理实践

本专题围绕 ThinkPHP 中间件体系展开,深入讲解中间件的定义、注册与执行流程。内容包括全局中间件与路由中间件的区别、请求前后处理逻辑、自定义中间件开发以及权限验证与日志处理应用。通过实际案例,帮助开发者掌握中间件在项目中的核心作用与最佳实践。

458

2026.03.31

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2295

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3762

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1256

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

4359

2025.09.10

软件测试常用工具
软件测试常用工具

软件测试常用工具有Selenium、JUnit、Appium、JMeter、LoadRunner、Postman、TestNG、LoadUI、SoapUI、Cucumber和Robot Framework等等。测试人员可以根据具体的测试需求和技术栈选择适合的工具,提高测试效率和准确性 。

5150

2023.10.13

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 12.5万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn