0

我有以下情况,我有一个在用户登录时添加标志的中间件

//if some situation happend
req.feathers.isAuthenticated = true;
//else
req.feathers.isAuthenticated = false;
next();

我有一个钩子可以检查用户是否已经登录了某些服务

myService.before({
        create(hook, next) {
            if (!hook.params.isAuthenticated) {
                throw new Error('AccessDenied');
            }
            next();
        }
    });

这项工作按预期进行,问题出在错误处理程序上,当我在我的应用程序末尾添加一个简单的错误处理程序时

app.use(function (err, req, res, next) {
        if (isDev) {
            console.error(err);
        }
        res.status(err.status || 500);
        res.json(err);
    });

err 对象是整个钩子对象,也是 Error 的一个实例

我只是想得到之前在钩子上抛出的错误,我尝试next(err)在钩子上调用,但这不起作用。

有人可以帮我解决这个问题吗?

编辑

我不想删除我的错误处理程序上的钩子属性

4

1 回答 1

0

当你打电话时,next(error)你也必须同时返回,这样next就不会再次被调用:

myService.before({
    create(hook, next) {
        if (!hook.params.isAuthenticated) {
            return next(new Error('AccessDenied'));
        }
        next();
    }
});

如果这也不起作用,请在 feathers-hooks 中提出问题

于 2016-10-08T16:53:08.833 回答