class RequestTag extends Context.Tag('ExpressRequest')<RequestTag, Request>() {}
class ResponseTag extends Context.Tag('ExpressResponse')<ResponseTag, Response>() {}
function effectHandler<T>(handler: Effect.Effect<T, Error, RequestTag | ResponseTag>) {
return (req: Request, res: Response) => {
// Provide Request and Response to the Effect's environment
const ExpressContextLayer = Layer.mergeAll(Layer.succeed(RequestTag, req), Layer.succeed(ResponseTag, res))
// Run the Effect and handle promise result
const result = Effect.runPromise(Effect.provide(handler, ExpressContextLayer))
/* TAP ERROR HERE */
};
}
const app = express()
app.get('/api/test', effectHandler(Effect.gen(function*() {
const req = yield* RequestTag
const res = yield* ResponseTag
/* ERROR THROWN HERE */
throw 'Some error'
console.log(req.path)
res.send('abc')
return {}
})))
app.listen(5000)
console.log('Listening...')
class RequestTag extends Context.Tag('ExpressRequest')<RequestTag, Request>() {}
class ResponseTag extends Context.Tag('ExpressResponse')<ResponseTag, Response>() {}
function effectHandler<T>(handler: Effect.Effect<T, Error, RequestTag | ResponseTag>) {
return (req: Request, res: Response) => {
// Provide Request and Response to the Effect's environment
const ExpressContextLayer = Layer.mergeAll(Layer.succeed(RequestTag, req), Layer.succeed(ResponseTag, res))
// Run the Effect and handle promise result
const result = Effect.runPromise(Effect.provide(handler, ExpressContextLayer))
/* TAP ERROR HERE */
};
}
const app = express()
app.get('/api/test', effectHandler(Effect.gen(function*() {
const req = yield* RequestTag
const res = yield* ResponseTag
/* ERROR THROWN HERE */
throw 'Some error'
console.log(req.path)
res.send('abc')
return {}
})))
app.listen(5000)
console.log('Listening...')