mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
src,lib: introduce util.getSystemErrorMessage(err)
This patch adds a new utility function which provides human-readable string description of the given system error code. Signed-off-by: Juan José Arboleda <soyjuanarbol@gmail.com> PR-URL: https://github.com/nodejs/node/pull/54075 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
This commit is contained in:
parent
7d0a490d1b
commit
61e52c8bd3
@ -463,6 +463,26 @@ fs.access('file/that/does/not/exist', (err) => {
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## `util.getSystemErrorMessage(err)`
|
||||||
|
|
||||||
|
<!-- YAML
|
||||||
|
added: REPLACEME
|
||||||
|
-->
|
||||||
|
|
||||||
|
* `err` {number}
|
||||||
|
* Returns: {string}
|
||||||
|
|
||||||
|
Returns the string message for a numeric error code that comes from a Node.js
|
||||||
|
API.
|
||||||
|
The mapping between error codes and string messages is platform-dependent.
|
||||||
|
|
||||||
|
```js
|
||||||
|
fs.access('file/that/does/not/exist', (err) => {
|
||||||
|
const name = util.getSystemErrorMessage(err.errno);
|
||||||
|
console.error(name); // no such file or directory
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
## `util.inherits(constructor, superConstructor)`
|
## `util.inherits(constructor, superConstructor)`
|
||||||
|
|
||||||
<!-- YAML
|
<!-- YAML
|
||||||
|
@ -386,6 +386,10 @@ function getCWDURL() {
|
|||||||
return cachedURL;
|
return cachedURL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getSystemErrorMessage(err) {
|
||||||
|
return lazyUv().getErrorMessage(err);
|
||||||
|
}
|
||||||
|
|
||||||
function getSystemErrorName(err) {
|
function getSystemErrorName(err) {
|
||||||
const entry = uvErrmapGet(err);
|
const entry = uvErrmapGet(err);
|
||||||
return entry ? entry[0] : `Unknown system error ${err}`;
|
return entry ? entry[0] : `Unknown system error ${err}`;
|
||||||
@ -880,6 +884,7 @@ module.exports = {
|
|||||||
getStructuredStack,
|
getStructuredStack,
|
||||||
getSystemErrorMap,
|
getSystemErrorMap,
|
||||||
getSystemErrorName,
|
getSystemErrorName,
|
||||||
|
getSystemErrorMessage,
|
||||||
guessHandleType,
|
guessHandleType,
|
||||||
isError,
|
isError,
|
||||||
isUnderNodeModules,
|
isUnderNodeModules,
|
||||||
|
14
lib/util.js
14
lib/util.js
@ -81,6 +81,7 @@ const {
|
|||||||
deprecate,
|
deprecate,
|
||||||
getSystemErrorMap,
|
getSystemErrorMap,
|
||||||
getSystemErrorName: internalErrorName,
|
getSystemErrorName: internalErrorName,
|
||||||
|
getSystemErrorMessage: internalErrorMessage,
|
||||||
promisify,
|
promisify,
|
||||||
defineLazyProperties,
|
defineLazyProperties,
|
||||||
} = require('internal/util');
|
} = require('internal/util');
|
||||||
@ -269,6 +270,18 @@ function callbackify(original) {
|
|||||||
return callbackified;
|
return callbackified;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {number} err
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
function getSystemErrorMessage(err) {
|
||||||
|
validateNumber(err, 'err');
|
||||||
|
if (err >= 0 || !NumberIsSafeInteger(err)) {
|
||||||
|
throw new ERR_OUT_OF_RANGE('err', 'a negative integer', err);
|
||||||
|
}
|
||||||
|
return internalErrorMessage(err);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {number} err
|
* @param {number} err
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
@ -343,6 +356,7 @@ module.exports = {
|
|||||||
getCallSite,
|
getCallSite,
|
||||||
getSystemErrorMap,
|
getSystemErrorMap,
|
||||||
getSystemErrorName,
|
getSystemErrorName,
|
||||||
|
getSystemErrorMessage,
|
||||||
inherits,
|
inherits,
|
||||||
inspect,
|
inspect,
|
||||||
isArray: deprecate(ArrayIsArray,
|
isArray: deprecate(ArrayIsArray,
|
||||||
|
14
src/uv.cc
14
src/uv.cc
@ -59,6 +59,15 @@ using v8::ReadOnly;
|
|||||||
using v8::String;
|
using v8::String;
|
||||||
using v8::Value;
|
using v8::Value;
|
||||||
|
|
||||||
|
void GetErrMessage(const FunctionCallbackInfo<Value>& args) {
|
||||||
|
Environment* env = Environment::GetCurrent(args);
|
||||||
|
int err = args[0].As<v8::Int32>()->Value();
|
||||||
|
CHECK_LT(err, 0);
|
||||||
|
char message[50];
|
||||||
|
uv_strerror_r(err, message, sizeof(message));
|
||||||
|
args.GetReturnValue().Set(OneByteString(env->isolate(), message));
|
||||||
|
}
|
||||||
|
|
||||||
void ErrName(const FunctionCallbackInfo<Value>& args) {
|
void ErrName(const FunctionCallbackInfo<Value>& args) {
|
||||||
Environment* env = Environment::GetCurrent(args);
|
Environment* env = Environment::GetCurrent(args);
|
||||||
if (env->options()->pending_deprecation && env->EmitErrNameWarning()) {
|
if (env->options()->pending_deprecation && env->EmitErrNameWarning()) {
|
||||||
@ -70,8 +79,7 @@ void ErrName(const FunctionCallbackInfo<Value>& args) {
|
|||||||
"DEP0119").IsNothing())
|
"DEP0119").IsNothing())
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int err;
|
int err = args[0].As<v8::Int32>()->Value();
|
||||||
if (!args[0]->Int32Value(env->context()).To(&err)) return;
|
|
||||||
CHECK_LT(err, 0);
|
CHECK_LT(err, 0);
|
||||||
char name[50];
|
char name[50];
|
||||||
uv_err_name_r(err, name, sizeof(name));
|
uv_err_name_r(err, name, sizeof(name));
|
||||||
@ -128,11 +136,13 @@ void Initialize(Local<Object> target,
|
|||||||
}
|
}
|
||||||
|
|
||||||
SetMethod(context, target, "getErrorMap", GetErrMap);
|
SetMethod(context, target, "getErrorMap", GetErrMap);
|
||||||
|
SetMethod(context, target, "getErrorMessage", GetErrMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
|
void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
|
||||||
registry->Register(ErrName);
|
registry->Register(ErrName);
|
||||||
registry->Register(GetErrMap);
|
registry->Register(GetErrMap);
|
||||||
|
registry->Register(GetErrMessage);
|
||||||
}
|
}
|
||||||
} // namespace uv
|
} // namespace uv
|
||||||
} // namespace node
|
} // namespace node
|
||||||
|
@ -5,6 +5,7 @@ const common = require('../common');
|
|||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
const {
|
const {
|
||||||
getSystemErrorName,
|
getSystemErrorName,
|
||||||
|
getSystemErrorMessage,
|
||||||
_errnoException
|
_errnoException
|
||||||
} = require('util');
|
} = require('util');
|
||||||
|
|
||||||
@ -13,6 +14,7 @@ const uv = internalBinding('uv');
|
|||||||
const keys = Object.keys(uv);
|
const keys = Object.keys(uv);
|
||||||
|
|
||||||
assert.strictEqual(uv.errname(-111111), 'Unknown system error -111111');
|
assert.strictEqual(uv.errname(-111111), 'Unknown system error -111111');
|
||||||
|
assert.strictEqual(uv.getErrorMessage(-111111), 'Unknown system error -111111');
|
||||||
|
|
||||||
keys.forEach((key) => {
|
keys.forEach((key) => {
|
||||||
if (!key.startsWith('UV_'))
|
if (!key.startsWith('UV_'))
|
||||||
@ -21,6 +23,8 @@ keys.forEach((key) => {
|
|||||||
const err = _errnoException(uv[key], 'test');
|
const err = _errnoException(uv[key], 'test');
|
||||||
const name = uv.errname(uv[key]);
|
const name = uv.errname(uv[key]);
|
||||||
assert.strictEqual(getSystemErrorName(uv[key]), name);
|
assert.strictEqual(getSystemErrorName(uv[key]), name);
|
||||||
|
assert.notStrictEqual(getSystemErrorMessage(uv[key]),
|
||||||
|
`Unknown system error ${key}`);
|
||||||
assert.strictEqual(err.code, name);
|
assert.strictEqual(err.code, name);
|
||||||
assert.strictEqual(err.code, getSystemErrorName(err.errno));
|
assert.strictEqual(err.code, getSystemErrorName(err.errno));
|
||||||
assert.strictEqual(err.message, `test ${name}`);
|
assert.strictEqual(err.message, `test ${name}`);
|
||||||
@ -53,3 +57,4 @@ function runTest(fn) {
|
|||||||
|
|
||||||
runTest(_errnoException);
|
runTest(_errnoException);
|
||||||
runTest(getSystemErrorName);
|
runTest(getSystemErrorName);
|
||||||
|
runTest(getSystemErrorMessage);
|
||||||
|
Loading…
Reference in New Issue
Block a user