const httpServer = createServer(async (req, res) => {
try {
// Handle WebSocket upgrade requests separately
if (req.headers.upgrade && req.headers.upgrade.toLowerCase() === 'websocket') return
// Convert Node.js request to Web standard Request
const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`)
const headers = new Headers()
Object.entries(req.headers).forEach(([key, value]) => {
if (value) headers.set(key, Array.isArray(value) ? value.join(', ') : value)
})
const body = req.method !== 'GET' && req.method !== 'HEAD' ? req : null
// Create readable stream from request body
let bodyStream = null
if (body) {
bodyStream = new ReadableStream({
start(controller) {
body.on('data', chunk => controller.enqueue(chunk))
body.on('message', chunk => controller.enqueue(chunk))
body.on('end', () => controller.close())
body.on('error', err => controller.error(err))
},
})
}
const request = new Request(url.toString(), { method: req.method, headers, body: bodyStream })
const response = await app.fetch(request)
// Write the response back to the Node.js response object
res.writeHead(response.status, Object.fromEntries(response.headers.entries()))
const responseBody = await response.arrayBuffer()
res.end(Buffer.from(responseBody))
} catch (err) {
console.error('Error handling request:', err)
res.writeHead(500)
res.end('Internal Server Error')
}
})
const wss = new WebSocketServer({ server: httpServer, path: '/ws' })
serve({ fetch:app.fetch, port:config.PORT, createServer:()=>httpServer }, info => console.log(`💨 API server is running on Port ${info.port}`))
const httpServer = createServer(async (req, res) => {
try {
// Handle WebSocket upgrade requests separately
if (req.headers.upgrade && req.headers.upgrade.toLowerCase() === 'websocket') return
// Convert Node.js request to Web standard Request
const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`)
const headers = new Headers()
Object.entries(req.headers).forEach(([key, value]) => {
if (value) headers.set(key, Array.isArray(value) ? value.join(', ') : value)
})
const body = req.method !== 'GET' && req.method !== 'HEAD' ? req : null
// Create readable stream from request body
let bodyStream = null
if (body) {
bodyStream = new ReadableStream({
start(controller) {
body.on('data', chunk => controller.enqueue(chunk))
body.on('message', chunk => controller.enqueue(chunk))
body.on('end', () => controller.close())
body.on('error', err => controller.error(err))
},
})
}
const request = new Request(url.toString(), { method: req.method, headers, body: bodyStream })
const response = await app.fetch(request)
// Write the response back to the Node.js response object
res.writeHead(response.status, Object.fromEntries(response.headers.entries()))
const responseBody = await response.arrayBuffer()
res.end(Buffer.from(responseBody))
} catch (err) {
console.error('Error handling request:', err)
res.writeHead(500)
res.end('Internal Server Error')
}
})
const wss = new WebSocketServer({ server: httpServer, path: '/ws' })
serve({ fetch:app.fetch, port:config.PORT, createServer:()=>httpServer }, info => console.log(`💨 API server is running on Port ${info.port}`))