Comecei a aprender sobre o Express 4.0 no meu aplicativo Node.js. Descobri que ele gerava um ./bin/www
arquivo, no qual apenas as configurações do servidor de aplicativos e da porta são gravadas e tudo o que outros como middleware e roteamento são definidos no ./app.js
arquivo.
No entanto, não tenho certeza do que isso ./bin/www
faz. Eu usei o Express 3.xe sempre defini configurações de servidor e porta, bem como roteamento e middleware no ./app.js
arquivo idêntico , e iniciei meu aplicativo de nó com node app.js
. Então, qual é o sentido de usar o ./bin/www
? Separa apenas a definição de servidor e porta das outras?
No momento, quando crio o pacote usando o express-generator, isso package.json
inclui a seguinte definição:
"scripts": {
"start": "node ./bin/www"
}
No entanto, gostaria de saber se devo iniciar meu aplicativo usando node ./bin/www
, ou npm start
. Qual comando devo executar para iniciar meu aplicativo?
E também, quando implanto meu aplicativo no heroku, o que devo escrever no Procfile
arquivo? É web: node app.js
suficiente?
fonte
Respostas:
No Express 3.0 , você normalmente usaria
app.configure()
(ouapp.use()
) para configurar o middleware necessário. O middleware que você especificou é empacotado junto com o Express 3.0.Exemplo:
No Express 4.0 , no entanto, todos os middlewares foram removidos para que possam ser mantidos e atualizados independentemente do núcleo Express (exceto o middleware estático), portanto, eles precisam ser chamados separadamente (o que você vê em
app.js
).O
bin/
diretório serve como um local onde você pode definir seus vários scripts de inicialização . Estewww
é um exemplo para iniciar o aplicativo expresso como um servidor da web.Finalmente, você pode ter diferentes scripts como
test
,stop
ourestart
, etc. Tendo esta estrutura permite que você tenha configurações de inicialização diferentes, sem colocar tudo emapp.js
.A maneira correta de iniciar seu aplicativo Express é:
Para implantar um aplicativo Express 4.x no Heroku , adicione-o ao seu
Procfile
:Ou, se você pode simplesmente usar o script de inicialização no
package.json
heroku, o heroku automaticamente o usa, leia mais aquifonte
www
. Não sei ao certo por que é assim chamado - talvez com o nome de World Wide Web?Aplicativos de nó como o Express 3.x usam arquivos de inicialização não padrão
app.js
, mas é o arquivo errado para ser executado.package.json
temque indica a linha de comando de inicialização. Não é trivial porque potencialmente contém uma linha de comando completa, e não apenas um caminho para o arquivo inicial.
fonte
se você estiver usando o express-generator, basta olhar para o arquivo local
./bin
, existe umwww
arquivo dentro do ./bin. Portanto, quando você executanode ./bin/www
, o node.js executa o código nowww
arquivo Nada chique.fonte
No Windows, use este comando:
fonte
Todos os itens acima responderam bem. Mas caso você queira usar
node app.js
apenas as versões Express 3. *. Você pode seguir abaixo:Como o arquivo app.js que foi gerado pelo gerador do Express 4 agora é um módulo Node.js. , ele não pode mais ser iniciado independentemente como um aplicativo (a menos que você modifique o código). O módulo deve ser carregado em um arquivo Node.js. e iniciado através do arquivo Node.js. O arquivo Node.js é ./bin/www neste caso. Para mais informações, visite a documentação oficial .
Nem o diretório bin nem o arquivo www sem extensão são obrigatórios para criar um aplicativo Express ou iniciar o aplicativo. São apenas sugestões feitas pelo gerador; sinta-se à vontade para modificá-las para atender às suas necessidades.
Para se livrar do diretório www e manter as coisas da “maneira 3 expressa”, exclua a linha que diz module.exports = app; no final do arquivo app.js, cole o seguinte código em seu lugar:
Em seguida, altere
"start": "node ./bin/www"
o arquivo package.json . Desde então, você mudou a funcionalidade de ./bin/www de volta para app.js. Agora, comece a usar"start": "node app.js"
para executar seu aplicativo expresso.fonte
coloque isso no Procfile
web: node ./bin/www
e verifique se ele funcionaforeman start
. O aplicativo deve estar disponível na porta 5000fonte