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

Node.js未主动执行解析操作却抛出SyntaxError的问题排查

报错含义说明

你看到的报错是@replit/database依赖包内部抛出的解析异常,不是你代码里手动写的解析逻辑触发的:

报错字面含义:读取键名为607341305994936320votecrate的存储值时自动解析失败,建议传入raw参数获取原始值避免解析过程。
其中键名607341305994936320votecrate就是你代码里拼接的用户ID + "votecrate"生成的数据库key,不是异常乱码。

根因定位
  • 核心问题1:你的weekendcheck()函数没有兜底返回逻辑。当webhook传入的isWeekend字段不是字符串格式的"true"/"false"时(比如实际传了布尔类型的true/false、字段为空),函数会返回undefined,你把undefined写入Replit Database后,下次调用db.get()读取时,包内部自带的自动类型解析逻辑无法识别这个非法格式的值,就会抛出解析错误。
  • 核心问题2:所有数据库操作的Promise没有添加异常捕获逻辑,解析失败的错误直接以未处理Promise警告的形式抛出,没有被业务逻辑接住。
  • 次要问题:你写的两个连续if(!value)/if(value)判断逻辑冗余,两个分支互斥,应该用if/else避免不必要的重复执行。
修复方案
  • 补全weekendcheck()的兜底逻辑,兼容布尔、字符串两种格式的isWeekend传值,保证永远返回合法的数字类型值,杜绝写入undefined的情况。
  • 调用db.get()时传入{raw: true}参数,直接获取存储的原始值,跳过内置的自动解析流程,从根源避免解析报错。
  • 给所有数据库操作加.catch()异常捕获,避免未处理的Promise异常导致服务不稳定。
  • 调整互斥判断为if/else结构,减少冗余执行。

修复后的完整代码如下:

const express = require('express');
const app = express();
const path = require('path');
const port = 300;
const Database = require("@replit/database")
const db = new Database()
const Topgg = require("@top-gg/sdk")

const topggauth = process.env['topgg']
const webhook = new Topgg.Webhook(topggauth)

app.post("/dblwebhook", webhook.listener(vote => {
  const user = vote.user

  if (vote.type == 'test'){
    console.log(vote)
  }
  if (vote.type){
    const weekend = vote.isWeekend
    function weekendcheck() {
      // 兼容字符串、布尔两种传值格式
      if (weekend === "true" || weekend === true){
        return 2
      }
      // 非周末场景兜底返回1
      return 1
    }
    const uservotec = `${user}votecrate`
    console.log(uservotec)
    // 传入raw: true跳过自动解析,加catch捕获异常
    db.get(uservotec, {raw: true}).then(value => {
      const addCount = weekendcheck()
      if (!value){
        db.set(uservotec, addCount).catch(err => console.error('写入初始投票数失败:', err))
      } else {
        db.set(uservotec, addCount + Number(value)).catch(err => console.error('更新投票数失败:', err))
      }
    }).catch(err => {
      console.error('读取投票数失败:', err)
    });
  }
}))

app.listen(port, () => console.log('App port online!'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:42:22