Skip to content

Node.js 示例

本示例使用 Node.js 内置的 fetch 发送非流式聊天请求,无需安装额外依赖。建议使用 Node.js 22 或更新的受支持版本。

准备环境

bash
node --version

准备可用令牌,以及支持 Chat Completions 接口的模型 ID。

设置环境变量

以下设置方式适用于 macOS、Linux 的 Bash 或 Zsh。替换占位值,在同一个终端执行后面的脚本:

bash
export NEW_API_BASE_URL='https://api.example.com/v1'
export NEW_API_KEY='your-api-key'
export NEW_API_MODEL='your-model-id'

正式服务可以使用部署平台的密钥配置功能注入这些变量。不要将令牌写入公开网页、前端构建变量或代码仓库。

创建脚本

新建 chat.mjs,写入以下代码。.mjs 文件可以直接使用顶层 await

js
const required = [
  'NEW_API_BASE_URL',
  'NEW_API_KEY',
  'NEW_API_MODEL'
]
const missing = required.filter((name) => !process.env[name])

if (missing.length > 0) {
  console.error('请先设置环境变量:' + missing.join(', '))
  process.exit(1)
}

const baseURL = process.env.NEW_API_BASE_URL.replace(/\/+$/, '')

try {
  const response = await fetch(baseURL + '/chat/completions', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer ' + process.env.NEW_API_KEY,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      model: process.env.NEW_API_MODEL,
      messages: [
        { role: 'user', content: '你好,请用一句话介绍自己。' }
      ],
      stream: false
    }),
    signal: AbortSignal.timeout(60_000)
  })

  if (!response.ok) {
    throw new Error('HTTP ' + response.status + ': ' + await response.text())
  }

  const result = await response.json()
  const content = result.choices?.[0]?.message?.content

  if (content) {
    console.log(content)
  } else {
    console.log('响应没有普通文本内容,请检查返回结构:')
    console.log(JSON.stringify(result, null, 2))
  }
} catch (error) {
  console.error('请求失败:', error.message)
  process.exitCode = 1
}

运行并查看结果

bash
node chat.mjs

终端应输出模型回复,随后可以在控制台查看对应的调用记录。

本示例设置了 60 秒客户端超时,不会自动重试。客户端中止等待,不代表服务端一定同步停止处理请求。

集成到自己的应用

在服务端保管令牌

将调用逻辑放在自己的后端服务中,由后端读取令牌、校验用户请求并转发。浏览器只访问自己的业务接口。

控制上下文和请求频率

只发送本次任务需要的消息,避免客户端操作意外产生大量重复请求。收到限流错误时,按照站点规则降低并发或等待后重试。

处理流式返回

本页示例设置了 stream: false,因此可以用 response.json() 解析。

如果改为 stream: true,需要读取响应流并解析 SSE 事件,不能继续将整个响应作为一个 JSON 对象处理。可以先参考 cURL 流式示例观察数据格式。

常见错误

  • fetch is not defined:检查是否使用了过旧的 Node.js。
  • 缺少环境变量:确认程序实际运行环境已经注入变量。
  • 401403404429:结合返回错误和错误排查处理。
  • 超时或网络错误:核对地址、网络和控制台调用记录。