freeCodeCamp/curriculum/challenges/portuguese/05-apis-and-microservices/basic-node-and-express/chain-middleware-to-create-...

2.7 KiB

id title localeTitle challengeType
587d7fb1367417b2b2512bf4 Chain Middleware to Create a Time Server Chain Middleware para criar um servidor de horário 2

Description

Middleware pode ser montado em uma rota específica usando app.METHOD(path, middlewareFunction) . O middleware também pode ser encadeado dentro da definição da rota. Veja o seguinte exemplo:
app.get('/user', function(req, res, next) {
req.user = getTheUserSync(); // Hypothetical synchronous operation
next();
}, function(req, res) {
res.send(req.user);
})
Essa abordagem é útil para dividir as operações do servidor em unidades menores. Isso leva a uma estrutura de aplicativo melhor e à possibilidade de reutilizar códigos em locais diferentes. Essa abordagem também pode ser usada para executar alguma validação nos dados. Em cada ponto da pilha de middlewares, você pode bloquear a execução da corrente atual e passar o controle para funções especificamente projetadas para lidar com erros. Ou você pode passar o controle para a próxima rota correspondente, para lidar com casos especiais. Vamos ver como na seção Express avançada. Na rota app.get('/now', ...) uma função de middleware e o manipulador final. Na função middleware você deve adicionar a hora atual ao objeto request na chave req.time . Você pode usar o new Date().toString() . No manipulador, responda com um objeto JSON, usando a estrutura {time: req.time} . Dica: O teste não passará se você não encadear o middleware. Se você montar a função em outro lugar, o teste falhará, mesmo se o resultado da saída estiver correto.

Instructions

Tests

tests:
  - text: O ponto de extremidade / now deve ter o middleware montado
    testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/chain-middleware-time'').then(data => { assert.equal(data.stackLength, 2, ''"/now" route has no mounted middleware''); }, xhr => { throw new Error(xhr.responseText); })'
  - text: O ponto final / now deve retornar um tempo que é de +/- 20 segundos a partir de agora
    testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/chain-middleware-time'').then(data => { var now = new Date(); assert.isAtMost(Math.abs(new Date(data.time) - now), 20000, ''the returned time is not between +- 20 secs from now''); }, xhr => { throw new Error(xhr.responseText); })'

Challenge Seed

Solution

// solution required