Я использую Next.js v9 и хотел бы воспользоваться опцией бессерверного развертывания Next, используя свое приложение с Cloudflare Workers.
Из документации Next.js я знаю, что каждая бессерверная функция, созданная Next, имеет следующую подпись:
export function render(req: http.IncomingMessage, res: http.ServerResponse) => void
При использовании класса http.Server
узла (например, с использованием express
) передача объектов req
и res
становится тривиальной, и в документации показан пример этого.
Однако проблема в том, что Cloudflare Workers используют другой объект Request
и Response
, чем ожидает Next. Документы для их Request
объекта можно найти здесь, а документы для их Response
объект можно найти здесь.
Итак, пока простое приложение "hello world", работающее на Cloudflare Workers, выглядит так:
// 1. Register a FetchEvent listener that sends a custom
// response for the given request.
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
// 2. Return a custom request object
async function handleRequest(request) {
return new Response('hello world')
}
а рендеринг простой функции Next.js может выглядеть примерно так:
const page = require('./.next/serverless/pages/some_page.js');
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
return page.render(request, new Response());
}
существует внутреннее несоответствие между типами resuest и response, поэтому я подозреваю, что будут возникать ошибки.
Я знаю, что мне нужно изменить их, чтобы они передавались так, как ожидает Next.js. Я знаю, что объект Request
Worker'а можно изменить, как показано здесь. Но я не уверен, как именно согласовать его с объектом http.IncomingMessage
. И я не уверен, как отформатировать объект Response
. Есть предположения?
Спасибо
ReadableStream
s и NodeJSReadable
s совершенно разные внутри. Список можно продолжить с другими реализациями. Так что восполнить этот пробел здесь потребует много работы. Думаю, так проще роутинг переделать ... - person Jonas Wilms   schedule 02.12.2019