在beforeRemote中拒绝,我可以使用res.send还是必须使用next()?

时间:2016-03-08 10:25:36

标签: express loopbackjs

TL; DR 假设客户端响应以其他方式管理,那么在beforeRemote中不调用next()的潜在问题/缺点是什么?

您好。

我在模型beforeRemote hook中有一个基本验证函数,如果满足某些条件,则需要向客户端返回拒绝。

我在先前的路由拦截中使用res.send,并且在beforeRemote中的res.send似乎也能正常工作。但是我担心文档会非常明确地说明" next"必须被调用,这意味着我无法手动res.send。

我是如何在早期路线中完成的

res.statusCode = 401;
return res.send("Access denied");

我如何安全地玩耍

err = new Error("Access Denied");
err.status = 401;
delete err.stack;
return next(err);

我更喜欢第一种方法,因为我不必花费时间"在回调之前抛出错误并删除堆栈跟踪(在其他地方需要,因此无法全局删除)。 res.send对我来说似乎更干净,但那可能是一种误解? 最后,我不确定在Loopback上下文中没有结束远程"是否存在任何长期缺陷" ((ctx。)res.send是"只是" Express)。

1 个答案:

答案 0 :(得分:0)

第二种方法更灵活。它允许您在发送回复之前执行某些操作。例如,您可能希望记录所有被拒绝的请求。或者,无论错误发生在哪里,都可以重定向到家。

使用next(err)所有你需要做的就是添加一些中间件来实现这一点,而使用第一种方法时,很可能需要在很多地方重复代码。或者,最终要避免这种情况,写下一些可以使next能够让你做的事情。