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

Node.js运行Google Speech-to-Text示例报ENOENT文件不存在错误

Google Speech-to-Text Node.js 接入报错排查

问题现象

在自有Web应用中接入Google Speech-to-Text能力时,为排除业务代码干扰,优先测试官方Node.js版本快速入门示例,分别覆盖远程存储URI音频转写、本地音频文件转写两个场景,两个示例运行时抛出完全一致的错误:

(node:4836) UnhandledPromiseRejectionWarning: Error: The file at { does not exist, or it is not a file. ENOENT: no such file or directory, lstat '[项目根目录路径]/{'

测试用代码示例

远程URI转写实现(参考官方文档)

// 加载dotenv读取凭证配置
require('dotenv').config();

// 引入Google Cloud客户端库
const speech = require('@google-cloud/speech');

// 初始化客户端实例
const client = new speech.SpeechClient();

async function quickstart() {
  // 测试用远程LINEAR16格式音频的GCS URI路径
  const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';

  // 音频识别基础配置
  const audio = {
    uri: gcsUri,
  };
  const config = {
    encoding: 'LINEAR16',
    sampleRateHertz: 16000,
    languageCode: 'en-US',
  };
  const request = {
    audio: audio,
    config: config,
  };

  // 发起语音识别请求
  const [response] = await client.recognize(request);
  const transcription = response.results
    .map(result => result.alternatives[0].transcript)
    .join('\n');
  console.log(`转写结果: ${transcription}`);
}
quickstart();

本地音频文件转写实现(参考教程视频)

require('dotenv').config();

const speech = require('@google-cloud/speech');
const fs = require('fs');

async function main() {
    const client = new speech.SpeechClient();
    const filename = './resources/Sample.mp3';

    const file = fs.readFileSync(filename);
    const audioBytes = file.toString('base64');

    const audio = {
        content: audioBytes
    };
    const config = {
        encoding: 'LINEAR16',
        sampleRateHertz: 16000,
        languageCode: 'en-US'
    };
    const request = {
        audio: audio,
        config: config
    };

    const [response] = await client.recognize(request);
    const transcription = response.results.map(result =>
        result.alternatives[0].transcript).join('\n');
    
    console.log(`转写结果: ${transcription}`);
}
main().catch(console.error);

缺失的必要环节

  • 核心报错触发逻辑:@google-cloud/speech SDK初始化时会按顺序校验凭证配置来源,当无法识别到有效凭证时,会尝试将空值/非法对象结构作为本地文件路径做存在性校验,最终抛出指向不存在路径{的ENOENT错误。该报错与音频转写的业务请求逻辑无关,属于SDK初始化阶段的凭证配置问题。
  • 凭证配置全流程缺失:
    • 未在对应Google Cloud项目中开启Speech-to-Text API服务
    • 未创建具备Speech Client角色权限的服务账号,未导出对应格式的JSON密钥文件
    • 未通过dotenv配置环境变量GOOGLE_APPLICATION_CREDENTIALS,将其指向本地密钥文件的绝对路径。SDK默认会读取该环境变量定位凭证文件,未配置时会触发非法路径解析逻辑,触发上述ENOENT报错。
  • 本地转写示例参数不匹配:
    • 代码中指定音频编码为LINEAR16,但测试文件为MP3格式,编码参数与实际音频格式不一致会导致识别失败,需根据音频实际格式调整encoding参数,MP3格式需对应设置为MP3,同时确保sampleRateHertz参数和音频实际采样率一致。
  • 异常捕获逻辑不完整:
    • 远程URI转写示例中直接调用异步方法quickstart(),未绑定.catch()捕获SDK初始化阶段抛出的错误,错误被归类为未处理的Promise拒绝,增加问题排查的复杂度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 00:36:07