Closed ryan-cahill closed 1 year ago
It hardly looks like a problem with this module.
I would guess that Sentry payload doesn't have text/*
type so express.text
probably is not parsing it. You should probably inspect the request that Sentry makes on the client side and adjust the parsing middleware so that it handles that type of payload.
Based on some fix I did in sentry-testkit, maybe a middleware like bodyParser.text({ type: () => true })
would be more effective. See https://github.com/zivl/sentry-testkit/blob/d5d0685e561f7bd3ed387c745365ef64593eb36b/src/localServerApi.ts#L23-L25
Thanks for the suggestion @rchl. That did seem to get the issue closer to being resolved, but there was still a missing piece that I didn't figure out. Seeing as I'm just evaluating the Session Replay feature, I didn't spend too much time continuing down that road. I found that the setting below solved the issue for now and Session Replay worked using the tunnel as expected. I found this from a similar issue in another repo
// nuxt.config.ts
...
clientIntegrations: {
Replay: {
useCompression: false,
...
As explained by @lforst in the linked issue:
Hi, this probably doesn't work because replay uses a binary format for it's payloads and nextjs automatically bodyparses.
express.text
is essentially body-parser
so same issue applies here.
I would suggest trying @nuxtjs/proxy
module instead of a custom server middleware.
Something like this might work:
modules: [
'@nuxtjs/proxy',
'@nuxtjs/sentry',
],
proxy: {
'/tunnel/sentry': {
target: 'https://[xxx].ingest.sentry.io/api/[projectId]/envelope/',
ignorePath: true,
},
},
// ...
}
Of course the [projectId]
and [xxx]
needs to be replaced with actual data from the DSN.
(This setup is not as dynamic as the one suggested by Sentry where Sentry origin and project ID is parsed automatically from the request URL but it might be good enough.)
Version
@nuxtjs/sentry: 7.2.1 nuxt: 2.16.1
Sentry configuration
Sentry server middleware
Steps to reproduce
src/server-middleware/sentry.tunnel.ts
abovemounted()
function in order to trigger a Sentry errorreq.body
is just an empty objectWhat is Expected?
There should be some kind of data representing the replay event in
req.body
in the tunnel middleware to forward to SentryWhat is actually happening?
req.body
is just an empty object in the tunnel middleware, so there's no replay data to forward to Sentry