Переписать небольшую функцию, завернутую в логгер, используя fp-ts - PullRequest
0 голосов
/ 07 мая 2019

Я хотел попробовать переписать некоторые части моего кода, используя 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 в последнем вызове цепочки, чтобы просто войти в систему между его получением и дальнейшей отправкой.Я хотел бы знать, является ли это правильным или есть какие-то другие образцы для этого.

...