直接答案
通过官方 Node.js SDK 的 `baseURL` 参数切换到 CodeNodex,在不改业务调用方式的前提下保留类型、超时与错误处理能力。
这篇内容解决什么问题
为 Node.js 和 TypeScript 项目提供可复制的 CodeNodex 接入样例,并防止 Key 泄漏到浏览器包、日志或源码。
安装 SDK 并保护服务端密钥
在 Node.js 服务端项目安装官方 openai 包。CodeNodex CLI 没有 Node.js SDK 客户端模式,也不会修改项目的 package manifest。
API Key 只能放在服务端环境变量或 secret 管理中。不要在 Next.js 客户端组件、Vite 的公开变量或浏览器代码中初始化带 Key 的 SDK。
npm install openai
export CODENODEX_API_KEY="YOUR_API_KEY"配置 baseURL、超时和重试
Node.js SDK 使用驼峰形式的 baseURL。值为 https://token.codenodex.com/v1,不要写成 Python SDK 的 base_url。
初始化时设置有限的 maxRetries 与 timeout,避免请求在外层 HTTP 服务中无限占用连接。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.CODENODEX_API_KEY,
baseURL: "https://token.codenodex.com/v1",
timeout: 60_000,
maxRetries: 2,
});发送 Responses API 请求
用 client.responses.create 发送最小请求。先调用 client.models.list() 或在控制台确认模型 ID,避免把展示名填进 model。
服务端接口应只返回业务需要的结果,不要把 SDK 原始对象中的内部元数据全部透传给浏览器。
const response = await client.responses.create({
model: "YOUR_MODEL_ID",
input: "用一句话解释事务隔离。",
});
console.log(response.output_text);按需启用流式事件
流式请求返回异步可迭代事件。只处理明确需要的事件类型,并在客户端断开时取消上游工作,避免继续消耗额度。
代理层还要关闭不必要的响应缓冲,并为首字节和总请求分别设置合理超时。
const stream = await client.responses.create({
model: "YOUR_MODEL_ID",
input: "列出三个代码审查检查点。",
stream: true,
});
for await (const event of stream) {
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
}
}处理状态码与部署差异
401 检查服务端环境变量;404 检查 baseURL 和模型 ID;429 检查余额、并发和重试放大;连接错误检查部署平台 DNS、代理和 TLS。
本地成功、生产失败时,先打印布尔值确认变量是否存在,再检查出口网络。不要为了排错输出 Key 内容,也不要使用 NEXT_PUBLIC_ 前缀。
- SDK 只在服务端模块初始化。
- 错误日志包含状态码和 request ID,不包含认证头。
- 流式连接断开后会取消上游请求。
- 生产环境超时大于上游首字节时间且有明确上限。
官方来源与核验范围
本文以公开官方文档为事实依据;命令和配置可能随客户端版本变化,执行前请同时核对对应来源。
查看技术核验方法