【问题标题】:Send Response back in Loopback on remote method beforeRemote hook在远程方法 beforeRemote 钩子上的 Loopback 中发送回响应
【发布时间】:2019-12-02 12:18:29
【问题描述】:

我正在为我的应用程序使用环回 v3 我的用例是验证请求标头中是否存在某些令牌,如果令牌无效,则发送标准格式的适当消息。我正在尝试使用 beforeRemote 来做到这一点。

我尝试的是返回 当令牌无效并且响应通过自定义中间件格式化(使用快速 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)UnhandledPromiseRejectionWarning:错误:回调已被调用。

(node:17177) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。 (拒绝编号:1)

我也尝试过查看文档,但那里没有帮助。

【问题讨论】:

    标签: javascript node.js express loopback


    【解决方案1】:

    试试这个:

    //不是单astrick,而是使用双astrick来处理prototype和non-prototype的方法 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;
        }
    });
    

    【讨论】:

      【解决方案2】:

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

      return {statusCode:401};
      

      改为?

      【讨论】:

      • 我试过了,还是会调用api方法而不是出来
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      相关资源
      最近更新 更多