You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中设置HTTP状态码201?解决设置后仍返回200的问题

问题分析与修复

核心问题

  1. 未实际修改响应状态码:你只是在响应体的errorCode字段中写了201,但没有通过header-metadata模块设置HTTP响应头的状态码,因此默认返回200。
  2. 判断逻辑无效:你的response对象根本不存在statusCode属性,if (response.statusCode == 201)永远为假,导致代码一直走错误分支。
  3. 变量命名冲突:用Error作为自定义变量名会覆盖JavaScript内置的Error对象,存在潜在风险。

修复后的代码

var sm = require("service-metadata");
var hm = require("header-metadata");
var querystring = require("querystring");

var uri = sm.getVar("var://service/URI");
var data = querystring.parse(uri.split("?")[1]);

// 定义成功响应体
var successResponse = {
  data: [
    {
      id: "02",
      Details: [
        {
          errorMessage: "Success",
          errorCode: 201,
        },
      ],
    },
  ],
};

// 定义错误响应体,规避内置对象命名冲突
var errorResponse = {
  ErrorDetails: {
    Reason: "Fault",
    errorMessage: "Runtime Error",
  },
};

// 替换为你的实际业务判断逻辑,示例直接返回成功
var shouldReturnSuccess = true;

if (shouldReturnSuccess) {
  // 关键:设置HTTP响应状态码为201
  hm.response.statusCode = 201;
  session.output.write(successResponse);
} else {
  // 可根据错误类型设置对应状态码,比如500
  hm.response.statusCode = 500;
  session.output.write(errorResponse);
}

关键修正说明

  • 通过hm.response.statusCode直接修改HTTP响应头的状态码,这是改变返回状态码的正确方式。
  • 调整变量名并补充了可自定义的业务判断条件,替换示例中的shouldReturnSuccess即可适配你的实际需求。
  • 明确区分请求头与响应头:hm.current对应当前请求的头信息,修改响应头必须使用hm.response。

内容的提问来源于stack exchange,提问作者Mandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:00:54