如何将KeystoneJs与Sentry.io集成

时间:2018-10-24 20:48:01

标签: keystonejs sentry

我以前曾与Sentry在其他平台上集成过项目,这非常简单。但是目前,我使用的是KeystoneJs,它是在Express的顶部创建的。

Sentry提供了本教程,可让Express用户将其应用程序与Sentry集成:https://sentry.io/for/express/

但是我不清楚如何将其应用于KeystoneJs项目,因为我们不能仅仅调用keystone.use()

我知道我们在梯形失真校正上有一些可用的钩子,所以我也尝试了以下方法:

const Sentry = require('@sentry/node'); 
Sentry.init({ dsn: 'https://a43847aba49b41d69b87793e01c008ae@sentry.io/1301672' });
keystone.set('pre:routes', Sentry.Handlers.requestHandler());
keystone.set('pre:routes', Sentry.Handlers.errorHandler());

这导致此错误:

TypeError: next is not a function
    at sentryErrorMiddleware (/Users/ronconi/Workspaces/OfficePools/victoria-royals-api/src/node_modules/@sentry/node/src/handlers.ts:268:5)
    at createApp (/Users/ronconi/Workspaces/OfficePools/victoria-royals-api/src/node_modules/keystone/server/createApp.js:119:29)
    at Keystone.initExpressApp (/Users/ronconi/Workspaces/OfficePools/victoria-royals-api/src/node_modules/keystone/lib/core/initExpressApp.js:9:47)
    at Keystone.start (/Users/ronconi/Workspaces/OfficePools/victoria-royals-api/src/node_modules/keystone/lib/core/start.js:47:7)
    at Object.<anonymous> (/Users/ronconi/Workspaces/OfficePools/victoria-royals-api/src/keystone.js:69:10)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at loader (/Users/ronconi/Workspaces/OfficePools/victoria-royals-api/src/node_modules/babel-register/lib/node.js:144:5)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/ronconi/Workspaces/OfficePools/victoria-royals-api/src/node_modules/babel-register/lib/node.js:154:7)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
    at Object.<anonymous> (/Users/ronconi/Workspaces/OfficePools/victoria-royals-api/src/node_modules/babel-cli/lib/_babel-node.js:154:22)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)

我想知道整合Keystone和Sentry的最佳方法,但是我找不到它。如果有人以前这样做过,请让我知道!

接下来,我将尝试将一个单独的快速应用程序添加到项目中,并将其与梯形失真链接,如下所示:https://github.com/keystonejs/keystone/wiki/How-to-Add-Keystone-to-an-Already-Existing-Express-App

由于这不是我的情况,因此我不确定这是最好的方法还是只是找到将正则表达式app.use()与KeystoneJs结合使用的方法。

1 个答案:

答案 0 :(得分:1)

回答我自己的问题。无需为此添加新的快递应用。我所要做的就是使用keystone.set()而不是app.use()

仅需注意:直接使用Express时,您可以添加多个错误处理中间件,而使用梯形失真校正时,我已经有了类似keystone.set('500', myCustomErrorHandlingMiddleware);

的东西。

所以我将代码移到其中以使用sentry.Handlers.errorHandler()