为什么Node.js为错误指定error.code,而为响应指定response.statusCode?
使用Node.js和Express时,我把自己弄糊涂了,弄不清是为什么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
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
classcode
属性引用了标准的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
。根据文档,它实际上应该是一个字符串。这是惯例。但没有任何机制可以阻止您为其指定任何类型的值。