使用 Node.js 接入 Midjourney API

在 Node.js 服务中调用 REST API,安全地提交图像任务、检查处理状态,并把回调连接到应用工作流。

准备条件

Node.js 18+ 可使用内置 fetch;旧版本可使用 node-fetch。TypeScript 可选。

准备条件

  • Node.js 18 或更高版本可使用内置 fetch;较旧版本可安装 node-fetch。
  • 准备 Midjourney API 密钥并保存在环境变量中。
  • TypeScript 可选;使用 fetch 与 JSON 即可发起标准 HTTP 请求。

读取凭据并提交任务

从 process.env 读取 API 密钥,通过 HTTPS POST 请求提交 prompt 与生成参数。授权信息放在请求头中;检查响应是否成功,并保存响应中的任务 ID。

查询结果

使用任务 ID 请求状态端点。轮询时设置 AbortSignal.timeout 或适当超时,并采用递增等待间隔。任务成功后读取图像 URL;若任务失败,向日志写入经过筛选的错误信息。

处理异步 Webhook

为需要可靠生产处理的服务建立 HTTPS 回调路由。快速校验并持久化事件,然后将业务逻辑放入后台队列。考虑重复投递与乱序事件,并使用任务 ID 或事件 ID 实现幂等。

运行可靠服务的建议

  • 仅在服务端调用 API,避免向浏览器发送密钥。
  • 使用队列控制并发,遵守服务端速率限制。
  • 为网络请求设置超时,区分瞬时故障与永久错误。
  • 记录请求时间、任务 ID、状态与耗时,不记录完整密钥。

Node.js 集成步骤

  • 在 Node.js 18+ 使用内置 fetch,也可安装 node-fetch。
  • 从环境变量读取 API 密钥并提交图像生成任务。
  • 用 taskId 调用 job-status 查询结果,或传入 hookUrl 接收异步回调。
  • 可用 TypeScript 定义请求与响应类型,减少状态与字段处理错误。

Node.js 请求示例

以下示例展示服务端安全读取凭据、提交提示词并获取 taskId。轮询时请设置超时、间隔和结束条件;生产环境可改用 Webhook。

const apiKey = process.env.MIDJOURNEY_API_KEY;
const response = await fetch(
  'https://api.midjourney-api.com/midjourney/v1/submit-jobs',
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'API-KEY': apiKey },
    body: JSON.stringify({ prompt: 'a cinematic landscape --ar 16:9', mode: 'fast' }),
    signal: AbortSignal.timeout(30000),
  }
);
if (!response.ok) throw new Error('Task submission failed');
const result = await response.json();
const taskId = result.data.taskId;

轮询、Webhook 与 TypeScript

查询端点可接收 taskIds 数组。对 status 为 1 的任务读取图像 URL;status 为 2 时处理失败。Webhook 处理器应快速确认回调、持久化事件并将后续任务放入队列。TypeScript 可将图像结果声明为包含 status、image 和可选 images 字段的类型。

运行建议

  • 不要将 API 密钥发送给浏览器。
  • 为所有 HTTP 请求设置超时。
  • 以递增间隔轮询,避免高频请求。
  • 根据服务规则限制并发并处理 HTTP 错误。

更多中文资源