【发布时间】:2012-12-18 17:25:27
【问题描述】:
我的 node.js 应用程序的建模类似于 express/examples/mvc 应用程序。
在控制器操作中,我想使用自定义 http 消息吐出 HTTP 400 状态。 默认情况下,http 状态消息是“Bad Request”:
HTTP/1.1 400 Bad Request
但我想发送
HTTP/1.1 400 Current password does not match
我尝试了各种方法,但都没有将 http 状态消息设置为我的自定义消息。
我当前的解决方案控制器功能如下所示:
exports.check = function( req, res) {
if( req.param( 'val')!=='testme') {
res.writeHead( 400, 'Current password does not match', {'content-type' : 'text/plain'});
res.end( 'Current value does not match');
return;
}
// ...
}
一切正常,但是……这似乎不是正确的方法。
有没有更好的方法来使用 express 设置 http 状态消息?
【问题讨论】:
-
好吧,这似乎是唯一的解决方法。但我不会建议这样的事情,HTTP 1.1 规范出于某些充分的理由将其错误描述标准化。我认为发送带有自定义描述的知名状态代码是不好的做法,但这取决于您。
-
嗯——也许那是真的。另一方面,我会假设浏览器只检查状态代码而不是人类可读的 http 状态消息。我认为使用 http 状态消息来传输具体(即非默认)错误消息(如果可用)是个好主意。另外,使用客户端 java 脚本很容易抓住它(使用 jQuery,您可以执行“jqXHR.statusText”来获取错误以用于显示目的)
-
这与兼容性或潜在的浏览器问题无关,这只是一种不好的做法;)如果您想要显示错误消息,请将其作为正文发送,这是预期目的。
-
具体的错误描述不是规范的一部分。 RCF-2616 明确指出:“为 HTTP/1.1 定义的数字状态代码的各个值,以及一组相应的原因短语的示例,如下所示。此处列出的原因短语只是建议——它们可以替换为不影响协议的本地等价物。”
-
自定义原因短语很棒,但是(因为您的消息是“当前密码不匹配”)听起来您实际上想要代码 401,在这种情况下您可能不需要更改消息。