【问题标题】:How to integrate KeystoneJs with Sentry.io如何将 KeystoneJs 与 Sentry.io 集成
【发布时间】:2019-03-29 09:11:13
【问题描述】:

我之前用Sentry集成了其他平台的项目,非常简单。但此时我使用的是KeystoneJs,它是在Express之上创建的。

Sentry 提供本教程让 Express 用户将他们的应用程序与 Sentry 集成:https://sentry.io/for/express/

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

我知道我们在 keystone 上有一些可用的钩子,所以我也尝试了这个:

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 的最佳方式,但我在任何地方都找不到。如果有人以前做过,请告诉我!

接下来我将尝试向项目中添加一个单独的 express 应用并将其与 keystone 链接,如下所述:https://github.com/keystonejs/keystone/wiki/How-to-Add-Keystone-to-an-Already-Existing-Express-App

由于不完全是我的情况,我不确定这是否是最好的方法,或者只是找到一种将正则表达式 app.use() 与 KeystoneJs 一起使用的方法。

【问题讨论】:

    标签: keystonejs sentry


    【解决方案1】:

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

    仅注意:直接使用 Express 时,您可以添加几个错误处理中间件,而使用 keystone,我已经有类似 keystone.set('500', myCustomErrorHandlingMiddleware); 的东西

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

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 2019-08-03
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 2020-05-14
      • 2016-01-26
      相关资源
      最近更新 更多