在远程挂钩之前的远程方法上的 Loopback 中发送响应

Send Response back in Loopback on remote method beforeRemote hook

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

我试过的是 return 当令牌无效并且响应通过自定义中间件格式化(使用 express res object)时承诺拒绝,我能够做到这一点。 当我这样做时,我收到了承诺未处理的拒绝警告,似乎 Loopback 没有处理承诺拒绝。 有没有更好的方法来处理用例。

Module_Name.beforeRemote("*", 异步函数(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

});

显示警告

(node:17177) UnhandledPromiseRejectionWarning: 错误: 回调已被调用。

(node:17177) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个错误要么是在没有 catch 块的情况下在异步函数内部抛出,要么是因为拒绝了一个没有用 .catch() 处理的承诺。 (拒绝编号:1)

我也尝试过阅读文档,但没有任何帮助。

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

return {statusCode:401};

代替?

试试这个:

//代替单astrick,使用双astrick来处理原型和非原型的方法 Module_Name.beforeRemote('*', 函数 (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;
    }
});