Я хотел попробовать переписать некоторые части моего кода, используя fp-ts, и подумал реорганизовать следующий метод:
export const createApiServer = () => {
logger.info("Starting World Server API");
const apiServer = express()
// 3rd party middleware
.use(helmet())
.use(bodyParser.json())
.use(cors())
// Root route
.get("/", (_, result) => result.sendStatus(httpStatusCodes.OK))
// 404 - Not Found
.use((_, result) => result.sendStatus(httpStatusCodes.NOT_FOUND))
// 500 - Internal Server Error
.use(errorLoggerMiddleware)
.use(errorResponseMiddleware);
logger.verbose(`Initialized World Server API in ${process.uptime().toFixed(3)} seconds`);
return apiServer;
};
После прочтения о типе IO
для побочных эффектов я попытался использовать его какследует:
const info = (message: string) => new IO(() => log.info(message));
const verbose = (message: string) => new IO(() => log.verbose(message));
const setupApiServer = () =>
new IO(() =>
express()
.use(helmet())
.use(bodyParser.json())
.use(cors())
.get("/", (_, result) => result.sendStatus(httpStatusCodes.OK))
.use((_, result) => result.sendStatus(httpStatusCodes.NOT_FOUND))
.use(errorLoggerMiddleware)
.use(errorResponseMiddleware)
);
export const createApiServer = () =>
info("Starting World Server API")
.chain(setupApiServer)
.chain((apiServer) =>
verbose(`Initialized World Server API in ${process.uptime().toFixed(3)} seconds`)
.map(() => apiServer)
)
.run();
Довольно странно произвольно использовать метод map для передачи по каналу через объект apiServer в последнем вызове цепочки, чтобы просто войти в систему между его получением и дальнейшей отправкой.Я хотел бы знать, является ли это правильным или есть какие-то другие образцы для этого.