为什么Node.js为错误指定error.code,而为响应指定response.statusCode?

为什么Node.js为错误指定error.code,而为响应指定response.statusCode?,node.js,express,error-handling,status,Node.js,Express,Error Handling,Status,使用Node.js和Express时,我把自己弄糊涂了,弄不清是code还是status 当我创建一个错误()时,我会这样做,例如: const Err = new Error(); Err.message = "Login failed"; Err.code = 401; // why is this not Err.statusCode or Err.status ? throw(Err); 通过Express返回最终成为: catch (error) { retu

使用Node.js和Express时,我把自己弄糊涂了,弄不清是
code
还是
status

当我创建一个
错误()
时,我会这样做,例如:

const Err = new Error();
Err.message = "Login failed";
Err.code = 401;   // why is this not Err.statusCode or Err.status ?
throw(Err);
通过Express返回最终成为:

catch (error) {
return res.status(error.code).send(error.message);
}
Express.js说,
res.status
是节点response.statusCode的别名


那么为什么相同的代码用三种不同的方式表达:
error.code
response.statusCode
res.status
。为什么不一致?

本质上,您所说的
代码和
状态是指两个不同的概念

1-
Error
class
code
属性引用了标准的node.js概念,并且不是特定于http的-就像
Error
class本身一样

这是node的文档中关于它的说明:

error.code属性是标识错误类型的字符串标签

如果希望表示http错误的
错误对象实际保存http状态信息,则没有任何东西阻止您添加专用的自定义
状态
-或
状态代码
-属性。在这种情况下,
code
属性的
httpError
值可能更合适,因为它引用的是更高级的概念,而不是更细粒度的http状态


2-
response.statusCode
response.status
都是特定于http的,并且与
http.ServerResponse
对象的http状态相关。
http.ServerResponse
类是由node.js定义的,而
res.status
只是一个速记设置器,由express添加以方便使用,并且不可能以它作为设置器的属性的名称命名。

但是在node.js中,
error.code
不是字符串,而是一个数字,即
Err.code=401
。根据文档,它实际上应该是一个字符串。这是惯例。但没有任何机制可以阻止您为其指定任何类型的值。