2.0.0 • Published 1 year ago
@pagopa/handler-kit-express v2.0.0
@pagopa/handler-kit-express
@pagopa/handler-kit-express
adapter for Express
How to use it
import { expressHandler } from "@pagopa/handler-kit-express";
// Given an Handler
// (from the @pagopa/handler README example)
const GetMovies = H.of((req: H.HttpRequest) =>
pipe(
req.body,
// perform a refinement with io-ts, and returns a ValidationError
// that represents a 422 HTTP response
H.parse(GetMoviesBody),
E.map(({ genre }) => genre),
RTE.fromEither,
RTE.chainTaskEither(getMoviesByGenre),
RTE.map((movies) => ({ items: movies })),
// wrap in a 200 HTTP response, with content-type JSON
RTE.map(H.successJson),
// convert Error instances to problem json (RFC 7808) objects
RTE.orElseW(flow(H.toProblemJson, H.problemJson))
)
);
// instead of wiring manually the dependencies
/*
GetMovies({
input: ...,
inputDecoder: ...,
logger: ...,
movies: ...
})*/
// just use "expressHandler"
const GetMoviesExpress = expressHandler(GetMovies)({
movies,
});
const ConsoleLogger: L.Logger = {
log: (r) => () => console.log(r),
format: L.format.json,
};
// now GetMoviesRoute can be called by the Express runtime
const app = express.default();
app.use(express.json());
// decorate "req" with "log" function
app.use(logger(ConsoleLogger));
// enable HTTP request logging
app.use(access());
app.post("/", GetMoviesExpress);
app.listen(3001, () => {
// eslint-disable-next-line no-console
console.log("Server ready on port 3001");
});
See the unit tests for other examples
2.0.0
1 year ago