import { createServer } from 'node:http'
import {
HttpMiddleware,
HttpRouter,
HttpServer,
HttpServerResponse,
} from '@effect/platform'
import { NodeHttpServer, NodeRuntime } from '@effect/platform-node'
import { Effect, Layer, pipe } from 'effect'
const router = HttpRouter.empty.pipe(
HttpRouter.get('/', HttpServerResponse.text('Hello World')),
)
const myMiddleware = HttpMiddleware.make((app) =>
pipe(
Effect.map(app, HttpServerResponse.setHeader('x-my-key', 'my-val')),
// logs { 'content-type': 'text/plain', 'content-length': '11', 'x-my-key': 'my-val' }
Effect.tap((res) => Effect.log(res.headers)),
),
)
const app = router.pipe(
HttpServer.serve(myMiddleware),
HttpServer.withLogAddress,
)
const port = 3000
const ServerLive = NodeHttpServer.layer(() => createServer(), { port })
NodeRuntime.runMain(Layer.launch(Layer.provide(app, ServerLive)))
import { createServer } from 'node:http'
import {
HttpMiddleware,
HttpRouter,
HttpServer,
HttpServerResponse,
} from '@effect/platform'
import { NodeHttpServer, NodeRuntime } from '@effect/platform-node'
import { Effect, Layer, pipe } from 'effect'
const router = HttpRouter.empty.pipe(
HttpRouter.get('/', HttpServerResponse.text('Hello World')),
)
const myMiddleware = HttpMiddleware.make((app) =>
pipe(
Effect.map(app, HttpServerResponse.setHeader('x-my-key', 'my-val')),
// logs { 'content-type': 'text/plain', 'content-length': '11', 'x-my-key': 'my-val' }
Effect.tap((res) => Effect.log(res.headers)),
),
)
const app = router.pipe(
HttpServer.serve(myMiddleware),
HttpServer.withLogAddress,
)
const port = 3000
const ServerLive = NodeHttpServer.layer(() => createServer(), { port })
NodeRuntime.runMain(Layer.launch(Layer.provide(app, ServerLive)))