为了账号安全,请及时绑定邮箱和手机立即绑定

在远程方法上的环回中发送响应 beforeRemote hook

在远程方法上的环回中发送响应 beforeRemote hook

翻翻过去那场雪 2021-08-20 15:47:42
我正在为我的应用程序使用环回 v3 我的用例是验证请求标头中是否存在某些令牌,如果令牌无效,则以标准格式发送适当的消息。我正在尝试使用 beforeRemote 来做到这一点。我尝试过的是在令牌无效并且响应通过自定义中间件(使用 express res 对象)格式化时返回承诺拒绝,我能够做到这一点。当我这样做时,我收到了承诺未处理的拒绝警告,似乎 Loopback 没有处理承诺拒绝。有没有更好的方法来处理用例。Module_Name.beforeRemote("*", async function(ctx, modelInst, next) {let token = getTokenFromHeader(ctx.req.headers);let tokenValid = await helper.validateToken(token);if (tokenValid){ return Promise.reject({statusCode:401}); // will not continue } next(); // call respective remote method});显示警告(节点:17177)未处理的PromiseRejectionWarning:错误:回调已被调用。(node:17177) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误要么是因为在没有 catch 块的情况下抛出了异步函数,要么是因为拒绝了一个没有用 .catch() 处理过的承诺。(拒绝编号:1)我也尝试浏览该文档,但没有帮助。
查看完整描述

2 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

试试这个:


//不使用单astrick,使用双astrick处理原型和非原型的方法 Module_Name.beforeRemote('*', function (ctx, modelInst, next) {


    let token = getTokenFromHeader(ctx.req.headers);

    helper.validateToken(token).then((validToken) => {

        //for success, proceed with next()

        next();

    }, (invalidToken) => {

        next(throwError());

    }).catch((ex) => {

        next(throwError());

    });


    function throwError() {

        let error = new Error();

        error.statusCode = 401;

        error.message = "Invalid Token"

        return error;

    }

});


查看完整回答
反对 回复 2021-08-20
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

这可能意味着调用函数正在使用等待,因此承诺已经解决。你试试怎么样

return {statusCode:401};

反而?


查看完整回答
反对 回复 2021-08-20
  • 2 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信