直接回答
公式 Node.js SDK の `baseURL` で接続先を CodeNodex に切り替え、既存の呼び出し方法を変えずに型、タイムアウト、エラー処理を維持します。
このガイドで解決できること
Node.js と TypeScript プロジェクト向けに再利用可能な CodeNodex 接続例を提供し、キーがブラウザバンドル、ログ、ソースコードへ漏えいするのを防ぎます。
SDK をインストールしてサーバー側のキーを保護する
Node.js のサーバープロジェクトに公式の openai パッケージをインストールします。CodeNodex CLI に Node.js SDK 用のクライアントモードはなく、プロジェクトの package manifest も変更しません。
API キーはサーバー側の環境変数またはシークレット管理にだけ保存します。Next.js の Client Component、Vite の公開変数、ブラウザコードでキー付き 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 に入力しないようにします。
サーバーの API は業務上必要な結果だけを返し、SDK の生オブジェクトに含まれる内部メタデータをすべてブラウザへ転送しないでください。
const response = await client.responses.create({
model: "YOUR_MODEL_ID",
input: "用一句话解释事务隔离。",
});
console.log(response.output_text);必要に応じてストリーミングイベントを有効にする
ストリーミングリクエストは非同期 iterable のイベントを返します。必要なイベント種別だけを処理し、クライアント切断時には上流処理をキャンセルして不要な利用量を発生させないようにします。
プロキシ層でも不要なレスポンスバッファリングを無効にし、最初のバイトとリクエスト全体に適切なタイムアウトを設定します。
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 を確認します。
ローカルでは成功するのに本番で失敗する場合、まず変数の有無だけを真偽値で表示し、次に外部ネットワークを確認します。トラブルシューティングのためにキーを出力したり、NEXT_PUBLIC_ プレフィックスを使用したりしないでください。
- SDK はサーバー側モジュールでのみ初期化する。
- エラーログにはステータスコードと request ID を含め、認証ヘッダーは含めない。
- ストリーミング接続が切れたら上流リクエストをキャンセルする。
- 本番のタイムアウトは上流の初回応答時間より長くし、明確な上限も設ける。
公式情報と検証範囲
本ガイドは公開されている公式ドキュメントを根拠にしています。コマンドや設定はクライアントのバージョンにより変わるため、実行前に参照元も確認してください。
技術検証方法を見る