如何在JavaScript中设置HTTP状态码201?解决设置后仍返回200的问题
问题分析与修复
核心问题
- 未实际修改响应状态码:你只是在响应体的
errorCode字段中写了201,但没有通过header-metadata模块设置HTTP响应头的状态码,因此默认返回200。 - 判断逻辑无效:你的
response对象根本不存在statusCode属性,if (response.statusCode == 201)永远为假,导致代码一直走错误分支。 - 变量命名冲突:用
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
相关产品推荐
相关产品推荐

