Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Variáveis express e app

Pessoal,

Uma dúvida bem básica, de um completo leigo em NodeJS. No exercício, o arquivo index.js fica com o seguinte código:

var express = require('express');
var app = express();
app.listen(3000, function(){
  console.log("Servidor rodando!");
});

Minha dúvida é: por que o NodeJS nos abriga a declarar uma variável (app no exemplo) para receber a invocação do express, que já foi carregado anteriormente? Isto é, por que mais uma variável é necessária para armazenar o objeto express?

De fato, tentei com express.listen(3000, function(){...}) e não funcionou. Mas ainda não entendi a sutileza por trás do var app = express().

Obrigado!

5 respostas

Por que quando você da o comando

var express = require('express');

Você não esta executando a função do express, está so passando ela pra uma variável, no caso a variável agora passa a conter uma função. E quando você da o comando

var app = express();

Você ai sim esta executando a função que foi guardada na variável express.

Poderia tambem ser esse comando

var express = require('express')();

Com os parenteses no final, você chamaria a função e executaria ela ao mesmo tempo.

Se não ficou muito claro avisa pra eu dar um outro exemplo.

Maurício,

Acho que agora clareou. Não tinha me atentado que o primeiro express não tem () no final.

Outra dúvida: essa forma que você mostrou, var express = require('express')(), é comum de se ver em projetos reais com NodeJS?

Ou a "boa prática" é declarar um express e depois um app, tal como apresentado no exercício?

Obrigado!

solução!

É comum sim, usar

var app = require("express")();

Pois economiza 1 linha e da o mesmo resultado, porém para algumas pessoas pode não ficar tão claro oque acontece ali, então quando se é mais iniciante costuma-se usar

var express = require('express');
var app = express();

pois fica mais explicito que e mais fácil de ler. Assim como também é indicado a declarar as variáveis, deste modo

var express = require('express')
    ,app = express();

Porém para uma pessoa que está iniciando não fica tão claro assim.

Ok, obrigado.

Se for possível, marcar o tópico como solucionado para outras pessoas que tem a mesma duvida.