Skip to content

Commit c9d1032

Browse files
authored
fix(app): update event before calling request hook (#3155)
1 parent 94a73b5 commit c9d1032

File tree

1 file changed

+34
-39
lines changed

1 file changed

+34
-39
lines changed

src/runtime/internal/app.ts

Lines changed: 34 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,40 @@ function createNitroApp(): NitroApp {
6161
return errorHandler(error as H3Error, event);
6262
},
6363
onRequest: async (event) => {
64+
// Init nitro context
65+
event.context.nitro = event.context.nitro || { errors: [] };
66+
67+
// Support platform context provided by local fetch
68+
const envContext: { waitUntil?: H3Event["waitUntil"] } | undefined = (
69+
event.node.req as unknown as { __unenv__: any }
70+
)?.__unenv__;
71+
if (envContext) {
72+
Object.assign(event.context, envContext);
73+
}
74+
75+
// Assign bound fetch to context
76+
event.fetch = (req, init) =>
77+
fetchWithEvent(event, req, init, { fetch: localFetch });
78+
event.$fetch = (req, init) =>
79+
fetchWithEvent(event, req, init as RequestInit, {
80+
fetch: $fetch as any,
81+
});
82+
83+
// https://github.com/nitrojs/nitro/issues/1420
84+
event.waitUntil = (promise) => {
85+
if (!event.context.nitro._waitUntilPromises) {
86+
event.context.nitro._waitUntilPromises = [];
87+
}
88+
event.context.nitro._waitUntilPromises.push(promise);
89+
if (envContext?.waitUntil) {
90+
envContext.waitUntil(promise);
91+
}
92+
};
93+
94+
event.captureError = (error, context) => {
95+
captureError(error, { event, ...context });
96+
};
97+
6498
await nitroApp.hooks.callHook("request", event).catch((error) => {
6599
captureError(error, { event, tags: ["request"] });
66100
});
@@ -111,45 +145,6 @@ function createNitroApp(): NitroApp {
111145
// Register route rule handlers
112146
h3App.use(createRouteRulesHandler({ localFetch }));
113147

114-
// A generic event handler give nitro access to the requests
115-
h3App.use(
116-
eventHandler((event) => {
117-
// Init nitro context
118-
event.context.nitro = event.context.nitro || { errors: [] };
119-
120-
// Support platform context provided by local fetch
121-
const envContext: { waitUntil?: H3Event["waitUntil"] } | undefined = (
122-
event.node.req as unknown as { __unenv__: any }
123-
)?.__unenv__;
124-
if (envContext) {
125-
Object.assign(event.context, envContext);
126-
}
127-
128-
// Assign bound fetch to context
129-
event.fetch = (req, init) =>
130-
fetchWithEvent(event, req, init, { fetch: localFetch });
131-
event.$fetch = (req, init) =>
132-
fetchWithEvent(event, req, init as RequestInit, {
133-
fetch: $fetch as any,
134-
});
135-
136-
// https://github.com/nitrojs/nitro/issues/1420
137-
event.waitUntil = (promise) => {
138-
if (!event.context.nitro._waitUntilPromises) {
139-
event.context.nitro._waitUntilPromises = [];
140-
}
141-
event.context.nitro._waitUntilPromises.push(promise);
142-
if (envContext?.waitUntil) {
143-
envContext.waitUntil(promise);
144-
}
145-
};
146-
147-
event.captureError = (error, context) => {
148-
captureError(error, { event, ...context });
149-
};
150-
})
151-
);
152-
153148
for (const h of handlers) {
154149
let handler = h.lazy ? lazyEventHandler(h.handler) : h.handler;
155150
if (h.middleware || !h.route) {

0 commit comments

Comments
 (0)