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

非调试模式下运行Node.js出现JSON解析错误如何解决

错误根因

SyntaxError: Unexpected token u in JSON at position 0报错的本质是传入JSON.parse()的参数为undefined:JS会先将undefined转为字符串"undefined"再尝试解析,第一个字符u不属于合法JSON起始字符,因此抛出语法错误。
两种运行场景表现不一致的核心原因:

  • VS Code调试模式下,启动配置(.vscode/launch.json)通常会自动配置工作目录、指定envFile路径,甚至直接在配置中硬编码注入环境变量,因此process.env.CALENDAR_CREDENTIALS可以正常读取到字符串值。
  • 终端直接执行node命令时,dotenv默认从执行命令时的终端工作目录查找.env文件,不会从JS脚本所在目录查找。如果终端当前路径和VS Code调试时的工作目录不一致、或者没有显式指定.env路径,dotenv就会加载失败,对应环境变量返回undefined,和你添加的类型检测结果完全匹配。
修复步骤
  1. 显式指定dotenv加载的.env文件路径,彻底规避工作目录不一致导致的加载失败,修改代码如下:
const { google } = require('googleapis');
const path = require('path');
// 请根据实际.env文件位置调整路径:如果.env和当前JS脚本同目录,就把'../.env'改成'.env'
require('dotenv').config({
  path: path.resolve(__dirname, '../.env')
});

// 增加环境变量合法性校验,提前抛出明确错误,避免无意义的JSON解析报错
if (!process.env.CALENDAR_CREDENTIALS) {
  throw new Error('CALENDAR_CREDENTIALS 环境变量缺失,请检查.env配置');
}
if (!process.env.CALENDAR_ID) {
  throw new Error('CALENDAR_ID 环境变量缺失,请检查.env配置');
}

const CREDENTIALS = JSON.parse(process.env.CALENDAR_CREDENTIALS);
const CALENDAR_ID = process.env.CALENDAR_ID;
  1. 排查.env文件本身的配置问题:
    • 确认.env文件中确实存在CALENDAR_CREDENTIALS和CALENDAR_ID配置项,不要只在VS Code的launch.json里写环境变量
    • 如果CALENDAR_CREDENTIALS是多行JSON,需要先压缩为单行字符串再存入.env,避免dotenv解析换行失败
  2. 临时验证方案:终端执行node命令前,先执行ls .env(macOS/Linux)或dir .env(Windows),确认当前工作目录下存在.env文件后再运行脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:45:49