Node.js 为什么loopback给我一个空的ctx.options操作挂钩?

Node.js 为什么loopback给我一个空的ctx.options操作挂钩?,node.js,express,loopback,Node.js,Express,Loopback,此问题也已提交给github: 在我们的应用程序中,我们定义了一个“保存前”操作挂钩。 使用它,我们打算对请求用户进行一些验证 为了访问请求用户的id,我们试图从上下文参数的optionsobject获取他的accessToken。这是根据官方的环回文件完成的( ) 以下代码已减少到调试所需的最少内容: Progress.observe('before save', function verifyAccessToken(ctx, next) { console.log('Exec

此问题也已提交给github:

在我们的应用程序中,我们定义了一个“保存前”操作挂钩。 使用它,我们打算对请求用户进行一些验证

为了访问请求用户的id,我们试图从上下文参数的optionsobject获取他的accessToken。这是根据官方的环回文件完成的( )

以下代码已减少到调试所需的最少内容:

Progress.observe('before save', function verifyAccessToken(ctx, next) {
        console.log('Executing before save');
        if (!ctx) {
            next(new Error('No ctx was passed to verifyMyUserExists'));
        }
        else if (!ctx.options) {
            console.log('Ctx is:');
            next(new Error('No options in ctx was passed to verifyMyUserExists'));
        }
        else if (!ctx.options.accessToken) {
            console.log('Options is:');
            console.log(ctx.options);
            next(new Error('No accessToken options in ctx was passed to verifyMyUserExists'));
        }
        else {
            next();
        }
    });
从本周起,在代码中没有任何更改的情况下,此验证不再有效。 基于此,我知道ctx.options是{}的空对象(请参阅下面的完整错误日志)。 因此,我们无法访问accessToken,当然

我们进行了一些故障排除,但无法找到根本原因,即ctx.options为空的原因

  • 我们正在使用钩子对简单对象执行标准操作 模型(没有自定义方法,只是一些基本的东西。)
  • 我们确保确实注入了选项(参见上面的代码和下面的输出)
  • 请注意,我们已经在发生错误的持久化模型中嵌入了另一个模型。但据我们所知,这不应该是一个问题,因为它以前起过作用
  • 预期结果

    我们希望操作钩子的参数ctx填充一个完整的选项对象,其中至少包含请求用户的accessToken

    有什么想法吗?我期待着你的回应和任何想法

    最好的, 伊诺斯辛格

    其他信息

    我们正在使用环回3。 我们在本地机器和Heroku中观察到错误,Heroku将应用程序作为普通节点应用程序运行

    操作挂钩的完整错误日志为:

    Executing before save
    Options is:
    {}
    Nicht verarbeiteter Fehler für Anforderung POST /api/progresses/?access_token=<XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX>: Error: No accessToken options in ctx was passed to verifyMyUserExists
        at verifyAccessToken (C:\Users\erosinger3\workspace_FitChallenger\Backend\common\models\progress.js:34:18)
        at notifySingleObserver (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:160:22)
        at C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\async\dist\async.js:3096:16
        at replenish (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\async\dist\async.js:998:17)
        at C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\async\dist\async.js:1002:9
        at eachLimit$1 (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\async\dist\async.js:3182:24)
        at Object.<anonymous> (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\async\dist\async.js:1032:16)
        at doNotify (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:157:11)
        at doNotify (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:155:49)
        at doNotify (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:155:49)
        at doNotify (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:155:49)
        at Function.ObserverMixin._notifyBaseObservers (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:178:5)
        at Function.ObserverMixin.notifyObserversOf (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:153:8)
        at Function.ObserverMixin._notifyBaseObservers (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:176:15)
        at Function.ObserverMixin.notifyObserversOf (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:153:8)
        at Function.ObserverMixin._notifyBaseObservers (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:176:15)
    
    保存前执行
    选择是:
    {}
    Nicht verarbeiter Fehler für Anforderung POST/api/progress/?access\u token=:错误:未将ctx中的accessToken选项传递给verifyMyUserExists
    在verifyAccessToken(C:\Users\erosinger3\workspace\u FitChallenger\Backend\common\models\progress.js:34:18)
    在notifySingleObserver(C:\Users\erosinger3\workspace\u FitChallenger\Backend\node\u modules\loopback datasource juggler\lib\observer.js:160:22)
    在C:\Users\erosinger3\workspace\u fitchallinger\Backend\node\u modules\async\dist\async.js:3096:16
    补充时(C:\Users\erosinger3\workspace\u fitchallinger\Backend\node\u modules\async\dist\async.js:998:17)
    在C:\Users\erosinger3\workspace\u fitchallinger\Backend\node\u modules\async\dist\async.js:1002:9
    每个限制$1(C:\Users\erosinger3\workspace\u fitchallinger\Backend\node\u modules\async\dist\async.js:3182:24)
    反对。(C:\Users\erosinger3\workspace\u fitchallinger\Backend\node\u modules\async\dist\async.js:1032:16)
    在doNotify(C:\Users\erosinger3\workspace\u fitchallinger\Backend\node\u modules\loopback datasource juggler\lib\observer.js:157:11)
    在doNotify(C:\Users\erosinger3\workspace\u fitchallinger\Backend\node\u modules\loopback datasource juggler\lib\observer.js:155:49)
    在doNotify(C:\Users\erosinger3\workspace\u fitchallinger\Backend\node\u modules\loopback datasource juggler\lib\observer.js:155:49)
    在doNotify(C:\Users\erosinger3\workspace\u fitchallinger\Backend\node\u modules\loopback datasource juggler\lib\observer.js:155:49)
    在Function.ObserverMixin.\u notifyBaseObservers(C:\Users\erosinger3\workspace\u FitChallenger\Backend\node\u modules\loopback datasource juggler\lib\observer.js:178:5)
    位于Function.ObserverMixin.notifyObserversOf(C:\Users\erosinger3\workspace\u fitchallinger\Backend\node\u modules\loopback datasource juggler\lib\observer.js:153:8)
    在Function.ObserverMixin.\u notifyBaseObservers(C:\Users\erosinger3\workspace\u FitChallenger\Backend\node\u modules\loopback datasource juggler\lib\observer.js:176:15)
    位于Function.ObserverMixin.notifyObserversOf(C:\Users\erosinger3\workspace\u fitchallinger\Backend\node\u modules\loopback datasource juggler\lib\observer.js:153:8)
    在Function.ObserverMixin.\u notifyBaseObservers(C:\Users\erosinger3\workspace\u FitChallenger\Backend\node\u modules\loopback datasource juggler\lib\observer.js:176:15)
    
    请原谅德国的错误信息。我不知道为什么在我今天更新VS代码后该文件已本地化…

    我建议检查该文件。找到您的执行dao函数的Model.notifyObserversOf('before save')并调试它。对我来说,代码看起来很棒。可能是其他观察员之一,删除选项。如果是这样,只需临时覆盖源代码,将options属性替换为setter并在其上设置断点。