我正在开发一个 Node.js/CoffeeScript 应用程序,我在其中使用类层次结构来解决错误。当我throw
在路由处理程序的根目录中使用语句时,一切都很好:
class APIError extends Error
constructor: ->
app.error (err, req, res, next) ->
if err instance of APIError
console.log 'APIError captured'
app.get '/', (req, res, next) ->
throw new APIError
但是,对于 Mongoose,使用throw
回调函数中的语句:
app.get '/', (req, res, next) ->
UserModel.where('name', 'Joe').findOne (err, doc) ->
throw new APIError
结果是
/usr/local/lib/node_modules/mongoose/lib/utils.js:413
throw err;
^
Error:
当我打电话时next()
,如
app.get '/', (req, res, next) ->
UserModel.where('name', 'Joe').findOne (err, doc) ->
return next new APIError
甚至在处理程序的主体中使用它:
app.get '/', (req, res, next) ->
next new APIError
我undefined
在控制台中被打印出来。
将最后一条语句更改为return next Error
按预期工作,即在控制台中打印出异常堆栈跟踪:
app.get '/', (req, res, next) ->
return next Error 'This works as expected'
是 Node.js 问题还是我在 CoffeeScript 中定义类的方式?任何想法如何使这种错误层次结构起作用?
更新 1
我可以确认这是 CoffeeScript 类的实现方式。使用标准的 JS 原型链定义可以解决问题,但感觉不对。