React前端传值至Node.js后端如何仅提取feed地址值?
解决后端获取Zustand存储地址的格式问题
你的问题出在后端没有正确解析请求体并提取feed字段,直接把请求对象当成了feed参数,所以控制台输出的是包含feed键的整个对象。以下是具体的修改方案:
核心问题分析
Node.js的API处理函数(不管是Express还是Next.js API路由)默认接收的是请求对象(req)和响应对象(res),而不是请求体里的单个字段。你之前直接把feed作为函数参数,导致这个参数实际是整个请求体对象,而非你需要的地址字符串。
具体修改步骤
情况1:使用Next.js API路由(匹配你的前端/api/getPrice请求路径)
修改后端的/api/getPrice.js文件:
exports.getPrice = async (req, res) => { // 从请求体中提取feed字段 const { feed } = req.body; console.log(feed); // 现在会输出单独的地址字符串:0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e // 恢复智能合约调用逻辑 const provider = new ethers.providers.JsonRpcProvider(RPC); const wallet = new ethers.Wallet(PRIVATE_KEY, provider); const contract = new ethers.Contract(CONTRACT, ABI, wallet); const price = await contract.getPrice(feed); console.log("Price:", price); // 返回结果给前端 res.status(200).json({ price }); };
情况2:使用Express框架
如果你的后端基于Express,首先要确保添加JSON解析中间件,然后修改路由处理函数:
const express = require('express'); const app = express(); // 必须添加此中间件,才能解析JSON格式的请求体 app.use(express.json()); app.post('/api/getPrice', async (req, res) => { const { feed } = req.body; console.log(feed); // 输出单独的地址字符串 // 智能合约调用逻辑... const provider = new ethers.providers.JsonRpcProvider(RPC); const wallet = new ethers.Wallet(PRIVATE_KEY, provider); const contract = new ethers.Contract(CONTRACT, ABI, wallet); const price = await contract.getPrice(feed); console.log("Price:", price); res.json({ price }); });
前端代码无需修改
你前端的fetch请求写法是正确的,JSON.stringify({ feed })会把地址包装成标准JSON对象发送,后端只需要正确解析提取即可。
内容的提问来源于stack exchange,提问作者noubidev
相关产品推荐
相关产品推荐

