相关疑难解决方法(0)

打字稿:'new' 表达式,其目标缺少构造签名,隐式具有 'any' type.ts(7009)

以下是最适合在 Chrome Devtools、Node.js 等中显示自定义错误的代码。基于此 StackOverflow 答案

function CustomErr (message) {
  var err = new Error(message)
  Object.setPrototypeOf(err, CustomErr.prototype)
  return err
}

CustomErr.prototype = Object.create(Error.prototype, {
  name: { value: 'Custom Error', enumerable: false }
})
Run Code Online (Sandbox Code Playgroud)

但是,当我将其转换为 Typescript 时:

function CustomErr (message: string) {
  var err = new Error(message)
  Object.setPrototypeOf(err, CustomErr.prototype)
  return err
}

CustomErr.prototype = Object.create(Error.prototype, {
  name: { value: 'Custom Error', enumerable: false }
})
Run Code Online (Sandbox Code Playgroud)

调用throw new CustomErr("something went wrong")显示此错误:

'new' expression, whose target lacks a construct …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-5 typescript

6
推荐指数
1
解决办法
6356
查看次数

在JavaScript中处理非法参数的惯用方式是什么?

假设我有一个仅接受非负数的函数,而我却得到了负数。

在Python中,我会提出一个ValueError。在Java中,我会抛出IllegalArgumentException。我应该在JavaScript中抛出任何内置的异常,还是应该返回undefined

javascript idioms

5
推荐指数
1
解决办法
184
查看次数

在JavaScript中设置错误原因(node.js)

是否可以在JavaScript中指定错误的原因(node.js)?我找到了Mozilla文档,它定义了如何设置消息/文件/行,但没有定义错误的原因.

我对此感兴趣的原因是我想捕获内部错误并将其传播到嵌套异常中的表面(类似于Java中的异常链接).

编辑:我刚刚在stackoverflow上找到了关于如何链接异常的以下答案.这真的是你能做的一切吗?

- ooxi

javascript exception node.js

5
推荐指数
2
解决办法
1724
查看次数

Expressjs - 处理中间件的错误

我正在构建一个API(使用Expressjs v4),通常我在路由中处理错误而不是使用中间件.例如:

router.use('/', function(req, res, next) {
  ...
  if (err)
    return res.status(500).send({type: "serverError", message: "Something has gone wrong on our end."});
}
Run Code Online (Sandbox Code Playgroud)

我现在意识到中间件是"走的路".我在Expressjs网站上看到了相当有限的文档:http://expressjs.com/guide/error-handling.html 但仍然不确定一些事情.

我添加了server.js:

function errorHandler(err, req, res, next) {

}
Run Code Online (Sandbox Code Playgroud)

但我该如何处理不同类型的错误(400,404,500等)?

每次发生错误时,我发现自己写了3行代码:

//A route
var err = new Error();
err.status = 404;
return next(err);
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方式访问状态:

function errorHandler(err, req, res, next) {
  console.log(err.status);
  if(err.status == "400")
    //do something
  else
    //etc etc
}
Run Code Online (Sandbox Code Playgroud)

当然有比这更简单的方法吗?我错过了什么吗?

error-handling node.js express

5
推荐指数
1
解决办法
463
查看次数

如何抛出InvalidArgumentException JavaScript?

目的

在JavaScript方法中抛出InvalidArgumentException,就像在Java或类似语言中一样.

背景

我一直在努力熟悉JavaSctipt错误处理,我知道我可以使用throw关键字抛出异常.

为此,我还阅读了MDN上throw文档和MDN上Error文档.

问题

到目前为止这是我的代码:

if (mySize >= myArray.length)
    throw new Error("InvalidArgumentExcpetion - BANG!!!!");
Run Code Online (Sandbox Code Playgroud)

这段代码对我来说有些问题:

  1. 我在异常中有文本.现在我有BANG,但明天我可能想要BONG,如果我决定改变它,我必须到处寻找!
  2. 我使用的是Error,而不是真正的InvalidArgumentExcpetion类型的新对象.这是正确的方法吗?

问题

所以现在我很困惑.

  1. 我应该像throw文档中那样创建一个新对象,还是创建一条错误消息?
  2. JavaScript没有我可以使用的InvalidArgumentException对象吗?
  3. 我应该如何进行以便采用可维护的方式抛出使用ECMA6的错误?

javascript error-handling exception throw

5
推荐指数
3
解决办法
8289
查看次数

Chrome 开发者工具中的自定义 JavaScript 错误格式

我希望 Chrome Dev Tools 以Error与本机浏览器错误相同的用户友好格式记录我的自定义错误对象(扩展)。

目前如下代码:

 console.log(new CustomError('boom'));
 console.log(new Error('boom'));
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

在此处输入图片说明

相反,我希望我的自定义错误类型与省略号 ( ...) 堆栈跟踪一起显示,并且在展开时可以方便地单击文件路径。

我当前的错误实现是MDN 自定义错误类型文档中建议的扩展方法,尽管我也尝试过这个这个Stack Overflow 的答案。

带有附加captureStackTrace支持的 MDN 实现是:

function CustomError(message) {
  this.message = message;
  if (Error.captureStackTrace) {
    Error.captureStackTrace(this, this.constructor)
  } else {
    this.stack = new Error().stack;
  }
}

 Object.setPrototypeOf(CustomError, Error);
 CustomError.prototype = Object.create(Error.prototype);
 CustomError.prototype.name = "CustomError";
 CustomError.prototype.message = "";
 CustomError.prototype.constructor = CustomError;
Run Code Online (Sandbox Code Playgroud)

有没有办法让 Chrome Dev Tools 将我的自定义错误视为标准错误?

javascript google-chrome-devtools

5
推荐指数
0
解决办法
295
查看次数

何时以及为何适合创建自定义异常?

我正在开发一个具有不同类型的错误、服务和域概念的复杂应用程序。

为了引发“对象”错误,我想到了两种不同的方法:

  1. 应用于Object.assign()Error 对象(如果我只需要抛出遵循此形式的一个或几个错误,这是一个简单的选择):

function f() {
  const err = new Error();

  Object.assign(err, {
    name: "ServiceError",
    code: "service/some-string-code",
    message: "Some message",
  });

  throw err;
}

try {
  f();
} catch(err) {
  console.log(err instanceof Error);
}
Run Code Online (Sandbox Code Playgroud)

  1. 创建自定义错误(扩展 Error 类)

class MyServiceError extends Error {
  constructor(code, message) {
    super(message);
  
    this.name = "ServiceError";
    this.code = code;
  }
}

function f() {
  const err = new MyServiceError("service/some-string-code", "Some message");

  throw err;
}

try {
  f();
} catch(err) {
  console.log(err instanceof Error);
  console.log(err …
Run Code Online (Sandbox Code Playgroud)

javascript error-handling

5
推荐指数
1
解决办法
2291
查看次数