Callbacks são muito utilizados em javascript. Callback é basicamente uma função que é passada para outra função. Toda função é uma ação, certo? Então imagine que o callback seja uma ação que você quer que aconteça depois de outra ação. Exemplo:
- Alguém me mandou mensagem
- Eu respondo de volta "olar".
Colocando isso em javascript, num formato de callback, seria:
alguemMandouMensagem(respondaOla).
O "respondaOla" é uma função que só será executada quando alguém mandar mensagem.
Outro exemplo:
function prepararComida (ingredientes, callback) {
// faça comida com os ingredientes
var comida = ingredientes + 'fogo'
callback(comida)
}
function comerComida(comida) {
// comer a comida
}
// comerComida é um callback de fazerComida, neste caso
prepararComida(ingredientes, comerComida)
Veja que a função comerComida é passada como callback para a função prepararComida. Poderia ter passado outra função também, como "venderComida". O importante é que o callback de "prepararComida" sempre será uma função que receberá a comida como um argumento.
Em outras palavras, o callback diz: "faça alguma coisa e me ligue de volta quando você tiver o resultado, para que então eu faça alguma coisa com ele".
O Express utiliza callbacks em suas rotas. Quando você diz:
app.get('/tips', listarDicas)
function listarDicas (req, res) {
// busque a lista de dicas no banco de dados e responda
res.json(tips)
}
Você está dizendo: Vigie a rota 'tips' para chamadas 'GET' e, se ela for acessada, interprete os dados e me entregue para que eu possa buscar uma lista de dicas. 'listarDicas' é uma função de callback de app.get. O Express funciona assim, ele sabe que você passará para ele uma função de callback.
Aprenda mais sobre callbacks aqui: https://www.sitepoint.com/callbacks-javascript/