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

服务端正常的Messenger webhook代码本地POST请求报JSON解析错误

问题原因

这个报错本质是body-parser解析JSON payload失败,触发原因几乎都是实际传入的请求体不是合法JSON格式,和Node版本、服务端代码本身无关,问题出在你执行curl命令的环境:
如果你是在Windows系统的cmd或者PowerShell中执行的curl命令,这两个终端环境不支持单引号作为字符串边界符,你写的-d参数外层的单引号不会被识别为字符串包裹标记,终端会自动拆解参数里的双引号,最终发到服务端的请求体是{object: page, entry: [{messaging: [{message: TEST_MESSAGE}]}这种没有双引号包裹key的畸形内容,不是合法JSON。body-parser尝试将这段字符串解析为JSON时,第一个字符是{,第二个字符是o,就会抛出你看到的SyntaxError: Unexpected token o in JSON at position 1错误。

解决方案

二选一即可:

  • 换用Git Bash、WSL等兼容Linux Shell语法的终端执行你原来的curl命令
  • 保持在cmd/PowerShell中执行的话,把-d参数的外层单引号改为双引号,内部的双引号统一加反斜杠转义,修改后的命令如下:
curl -H "Content-Type: application/json" -X POST "localhost:1337/webhook" -d "{\"object\": \"page\", \"entry\": [{\"messaging\": [{\"message\": \"TEST_MESSAGE\"}]}]}"

如果需要验证传入的请求内容是否符合预期,可以在POST路由的最开头添加临时逻辑打印原始请求体:

app.post('/webhook', (req, res, next) => {
  let rawData = '';
  req.on('data', chunk => rawData += chunk);
  req.on('end', () => console.log('原始请求体:', rawData));
  next();
}, (req, res) => {
  // 原有业务逻辑
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:24:00