如何在Seneca中从操作中引发错误?

时间:2018-11-02 01:31:53

标签: javascript node.js seneca

我正在使用SenecaJS开发一个简单的任务管理器,并且试图了解从操作中引发错误的正确方法。假设我有一个动作可以从数据存储区加载任务,但该任务不存在...

下面是我插件中的方法:

/**
 * Retrieves a task based on a task ID.
 *
 * @param  {number} args.taskID The UUID of the task to be retrieved.
 * @param  {function} done A callback function which is called upon retrieval. The
 * first argument is an error response; the second is the task.
 * @returns {Task|undefined} A task if one exists; otherwise undefined.
 */
this.get = function(args, reply) {
  var task = this.make('task')
    task.load$( args.taskID, function(err, task) 
      if(!task || err) {
      reply( {code:404, message:`Task ${args.taskID} not found.`} );
    } else {
      reply( task );
    }
  });
};

这是单元测试:

test('Returns "undefined" for non-existant tasks', (fin) => {
  var seneca = testSeneca(fin);
  var id = "I-don't-exist";
  seneca
    .act(
      { domain: 'task', action: 'get', taskID: id },
      function(err, result) {
        expect(result).not.toBeNull();
        expect(result.code).toBe(404);
        fin();
      }
    );
});

下面的代码有效,但是如您所见,我真的忽略了 err 回调并评估结果以查看是否为错误。在文档中,Seneca使用以下内容引发错误:

reply(new Error(404));

引发新错误(404);

但是当我这样做时,它结束了过程,并且单元测试失败。此外,即使我回答了两个对象,err回调也似乎总是为空。

是否存在使用err回调返回错误的更正确方法?

1 个答案:

答案 0 :(得分:0)

您可能正在使用插件定义实例来调用常规操作-在这种情况下,错误总是致命的,因为它们表示初始化失败。

尝试

this.get = function(args, reply, meta) {
  console.log(meta)

查看是否fatal === true

还请包括您的seneca.add通话代码,以便我们看看是否是这种情况。