Skip to content

Commit 91e1543

Browse files
committed
fix: revert functions API v2 work in handler
1 parent d5b36f4 commit 91e1543

File tree

1 file changed

+42
-24
lines changed

1 file changed

+42
-24
lines changed

src/templates/handler.ts

Lines changed: 42 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
import { createRequire } from 'module'
2-
import { IncomingMessage, ServerResponse } from 'node:http'
1+
import http from 'node:http'
2+
import { createRequire } from 'node:module'
33
import { fileURLToPath } from 'node:url'
44

5-
import type { Context } from '@netlify/functions'
5+
import type { Handler, HandlerContext, HandlerEvent } from '@netlify/functions'
6+
import '@vercel/node-bridge/bridge.js'
67

78
const require = createRequire(import.meta.url)
9+
10+
const { Bridge } = require('@vercel/node-bridge/bridge.js')
811
const { getRequestHandlers } = require('next/dist/server/lib/start-server.js')
912

10-
// eslint-disable-next-line import/no-unresolved
1113
const requiredServerFiles = require('./.next/required-server-files.json')
1214

1315
process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(requiredServerFiles.config)
@@ -16,29 +18,45 @@ const __dirname = fileURLToPath(new URL('.', import.meta.url))
1618

1719
process.chdir(__dirname)
1820

19-
// eslint-disable-next-line import/no-anonymous-default-export, @typescript-eslint/no-unused-vars
20-
export default async (request: Request, context: Context) => {
21-
// let Next.js initialize and create the request handler
22-
const [nextHandler] = await getRequestHandlers({
23-
port: 3000,
24-
hostname: 'localhost',
25-
dir: __dirname,
26-
isDev: false,
27-
})
28-
29-
const response = new ServerResponse(request)
30-
31-
try {
32-
console.log('Next server request:', request.url)
33-
await nextHandler(request, response)
34-
} catch (error) {
35-
console.error(error)
36-
response.statusCode = 500
37-
response.end('Internal Server Error')
21+
let bridge: typeof Bridge
22+
23+
export const handler: Handler = async function (event: HandlerEvent, context: HandlerContext) {
24+
if (!bridge) {
25+
// initialize Next.js and create the request handler
26+
const [nextHandler] = await getRequestHandlers({
27+
port: 3000,
28+
hostname: 'localhost',
29+
dir: __dirname,
30+
isDev: false,
31+
})
32+
33+
// create a standard HTTP server that will receive
34+
// requests from the bridge and send them to Next.js
35+
const server = http.createServer(async (req, res) => {
36+
try {
37+
console.log('Next server request:', req.url)
38+
await nextHandler(req, res)
39+
} catch (error) {
40+
console.error(error)
41+
res.statusCode = 500
42+
res.end('Internal Server Error')
43+
}
44+
})
45+
46+
bridge = new Bridge(server)
47+
bridge.listen()
3848
}
3949

50+
// pass the AWS lambda event and context to the bridge
51+
const { headers, ...result } = await bridge.launcher(event, context)
52+
4053
// log the response from Next.js
54+
const response = { headers, statusCode: result.statusCode }
4155
console.log('Next server response:', JSON.stringify(response, null, 2))
4256

43-
return response
57+
return {
58+
...result,
59+
headers,
60+
isBase64Encoded: result.encoding === 'base64',
61+
}
4462
}

0 commit comments

Comments
 (0)