我正在为我的应用程序使用环回 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 回答
![?](http://img1.sycdn.imooc.com/5458463b0001358f02200220-100-100.jpg)
湖上湖
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;
}
});
添加回答
举报
0/150
提交
取消