JavaScript HTTP 接入示例
使用 Node.js 服务端 fetch 接入德他文本 API,说明环境变量、超时控制、错误读取和避免前端泄露密钥。
作者:德他数据技术团队 · 更新于 2026-09-24
核心解答
在 Node.js 服务端读取环境变量并使用 fetch,设置输出上限和 stream:false。API Key 不进入浏览器包;AbortSignal 只终止本地等待,不代表上游生成已取消,应核验未知结果。
运行条件
在支持 fetch 的 Node.js 服务端运行。设置 DETA_API_KEY、DETA_MODEL,按需设置 DETA_BASE_URL。
不要把代码粘贴到网页开发者控制台,不要打包进前端。
请求代码
const base = (process.env.DETA_BASE_URL || 'https://www.data123.com.cn').replace(/\/$/, '');
const key = process.env.DETA_API_KEY;
const model = process.env.DETA_MODEL;
if (!key || !model) throw new Error('请先设置密钥和已核准模型');
try {
const response = await fetch(base + '/v1/chat/completions', {
method: 'POST',
headers: { Authorization: 'Bearer ' + key, 'Content-Type': 'application/json' },
body: JSON.stringify({
model, messages: [{ role: 'user', content: '用一句话介绍你的作用。' }],
max_tokens: 64, stream: false
}),
signal: AbortSignal.timeout(120000)
});
const result = await response.json();
if (!response.ok) {
console.error(response.status, result.error?.type,
response.headers.get('X-Deta-Request-ID'));
} else {
console.log(result.choices?.[0]?.message?.content);
}
} catch {
console.error('结果未确认,请先检查调用与账务记录,不自动重试。');
}
生产接入
示例不会自动重试,也不会代替业务自己的日志脱敏、访问控制或费用上限设计。真实请求可能产生费用。
常见问题
能直接放在前端网页里吗?
不能把带真实密钥的示例放到公开前端。应由自己的后端鉴权后调用,并对用户请求实施访问与预算限制。