@@ -7,7 +7,8 @@ import { runWithOpenNextRequestContext } from "utils/promise";
7
7
8
8
import { debug , error , warn } from "../adapters/logger" ;
9
9
import { patchAsyncStorage } from "./patchAsyncStorage" ;
10
- import { convertRes , createServerResponse , proxyRequest } from "./routing/util" ;
10
+ import { resolveProxyRequest } from "./resolve" ;
11
+ import { convertRes , createServerResponse } from "./routing/util" ;
11
12
import type { MiddlewareOutputEvent } from "./routingHandler" ;
12
13
import routingHandler , {
13
14
MIDDLEWARE_HEADER_PREFIX ,
@@ -65,6 +66,35 @@ export async function openNextHandler(
65
66
delete headers [ rawKey ] ;
66
67
}
67
68
69
+ if (
70
+ "isExternalRewrite" in preprocessResult &&
71
+ preprocessResult . isExternalRewrite === true
72
+ ) {
73
+ try {
74
+ preprocessResult = await globalThis . proxyExternalRequest . proxy (
75
+ preprocessResult . internalEvent ,
76
+ ) ;
77
+ } catch ( e ) {
78
+ error ( "External request failed." , e ) ;
79
+ preprocessResult = {
80
+ internalEvent : {
81
+ type : "core" ,
82
+ rawPath : "/500" ,
83
+ method : "GET" ,
84
+ headers : { } ,
85
+ url : "/500" ,
86
+ query : { } ,
87
+ cookies : { } ,
88
+ remoteAddress : "" ,
89
+ } ,
90
+ // On error we need to rewrite to the 500 page which is an internal rewrite
91
+ isExternalRewrite : false ,
92
+ isISR : false ,
93
+ origin : false ,
94
+ } ;
95
+ }
96
+ }
97
+
68
98
if ( "type" in preprocessResult ) {
69
99
// response is used only in the streaming case
70
100
if ( responseStreaming ) {
@@ -110,20 +140,14 @@ export async function openNextHandler(
110
140
store . mergeHeadersPriority = mergeHeadersPriority ;
111
141
}
112
142
113
- const preprocessedResult = preprocessResult as MiddlewareOutputEvent ;
114
143
const req = new IncomingMessage ( reqProps ) ;
115
144
const res = createServerResponse (
116
145
preprocessedEvent ,
117
146
overwrittenResponseHeaders ,
118
147
responseStreaming ,
119
148
) ;
120
149
121
- await processRequest (
122
- req ,
123
- res ,
124
- preprocessedEvent ,
125
- preprocessedResult . isExternalRewrite ,
126
- ) ;
150
+ await processRequest ( req , res , preprocessedEvent ) ;
127
151
128
152
const {
129
153
statusCode,
@@ -155,21 +179,13 @@ async function processRequest(
155
179
req : IncomingMessage ,
156
180
res : OpenNextNodeResponse ,
157
181
internalEvent : InternalEvent ,
158
- isExternalRewrite ?: boolean ,
159
182
) {
160
183
// @ts -ignore
161
184
// Next.js doesn't parse body if the property exists
162
185
// https://github.com/dougmoscrop/serverless-http/issues/227
163
186
delete req . body ;
164
187
165
188
try {
166
- // `serverHandler` is replaced at build time depending on user's
167
- // nextjs version to patch Nextjs 13.4.x and future breaking changes.
168
-
169
- if ( isExternalRewrite ) {
170
- return proxyRequest ( internalEvent , res ) ;
171
- }
172
-
173
189
//#override applyNextjsPrebundledReact
174
190
setNextjsPrebundledReact ( internalEvent . rawPath ) ;
175
191
//#endOverride
0 commit comments