Как интегрировать KeystoneJs с Sentry.io - PullRequest
0 голосов
/ 24 октября 2018

Я интегрировал проекты на других платформах с 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, но я нигде не смог его найти.Если кто-то сделал это раньше, пожалуйста, дайте мне знать!

Далее я попробую добавить в проект отдельное экспресс-приложение и связать его с keystone, как описано здесь: https://github.com/keystonejs/keystone/wiki/How-to-Add-Keystone-to-an-Already-Existing-Express-App

Так как это не совсем мой случай, я не уверен, что это лучший способ или просто найти способ использовать регулярный экспресс app.use() с KeystoneJs.

1 Ответ

0 голосов
/ 26 октября 2018

Отвечая на мой собственный вопрос.Нет необходимости добавлять новое экспресс-приложение для этого.Все, что мне нужно было сделать, это использовать keystone.set() вместо app.use().

Только примечание: работая напрямую с Express, вы можете добавить несколько промежуточных программ для обработки ошибок, в то время как с keystone у меня уже было что-то вроде keystone.set('500', myCustomErrorHandlingMiddleware);

Поэтому я переместил код для использования sentry.Handlers.errorHandler() внутрь него.

...