Apesar de conhecer bem o JavaScript, estou confuso com o que exatamente esses três projetos no ecossistema Node.js. É algo como o Rails 'Rack? Alguém pode me explicar?
Apesar de conhecer bem o JavaScript, estou confuso com o que exatamente esses três projetos no ecossistema Node.js. É algo como o Rails 'Rack? Alguém pode me explicar?
Respostas:
[ Atualização: Desde a versão 4.0, o Express não usa mais o Connect. No entanto, o Express ainda é compatível com o middleware criado para o Connect. Minha resposta original está abaixo.]
Fico feliz que você tenha perguntado sobre isso, porque é definitivamente um ponto de confusão comum para as pessoas que olham para o Node.js. Aqui está minha melhor chance de explicar isso:
O próprio Node.js oferece um módulo http , cujo createServer
método retorna um objeto que você pode usar para responder a solicitações HTTP. Esse objeto herda o http.Server
protótipo.
O Connect também oferece um createServer
método, que retorna um objeto que herda uma versão estendida do http.Server
. As extensões do Connect existem principalmente para facilitar a conexão middleware . É por isso que o Connect se descreve como uma "estrutura de middleware" e é frequentemente analogizado ao Ruby's Rack.
O Express faz para conectar o que o Connect faz ao módulo http: oferece um createServer
método que estende o Server
protótipo do Connect . Portanto, toda a funcionalidade do Connect está lá, além de exibir renderização e uma DSL útil para descrever rotas. Ruby Sinatra é uma boa analogia.
Existem outras estruturas que vão ainda mais longe e estendem o Express! Zappa , por exemplo, que integra suporte para CoffeeScript, jQuery do lado do servidor e testes.
Aqui está um exemplo concreto do que se entende por "middleware": pronto para uso, nenhuma das opções acima serve para arquivos estáticos. Mas basta jogar connect.static
(um middleware que vem com o Connect), configurado para apontar para um diretório, e seu servidor fornecerá acesso aos arquivos nesse diretório. Observe que o Express também fornece os middlewares do Connect; express.static
é o mesmo que connect.static
. (Ambos eram conhecidos comostaticProvider
até recentemente.)
Minha impressão é que a maioria dos aplicativos "reais" do Node.js. está sendo desenvolvida com o Express atualmente. os recursos adicionados são extremamente úteis e todas as funcionalidades de nível inferior ainda estão lá, se você desejar.
A resposta aceita é realmente antiga (e agora errada). Aqui estão as informações (com fonte) baseadas na versão atual do Connect (3.0) / Express (4.0).
http / https createServer
que simplesmente recebe um retorno de chamada (req, res), por exemplo
var server = http.createServer(function (request, response) {
// respond
response.write('hello client!');
response.end();
});
server.listen(3000);
Middleware é basicamente qualquer software que fica entre o código do aplicativo e alguma API de baixo nível. O Connect estende a funcionalidade interna do servidor HTTP e adiciona uma estrutura de plug-in. Os plugins atuam como middleware e, portanto, o connect é uma estrutura de middleware
A maneira como faz isso é bastante simples ( e, de fato, o código é realmente curto! ). Assim que você liga, var connect = require('connect'); var app = connect();
você obtém uma função app
que pode:
.use
( origem ) para gerenciar plug-ins ( que vêm daqui por causa dessa simples linha de código ).Devido a 1.), você pode fazer o seguinte:
var app = connect();
// Register with http
http.createServer(app)
.listen(3000);
Combine com 2.) e você obtém:
var connect = require('connect');
// Create a connect dispatcher
var app = connect()
// register a middleware
.use(function (req, res, next) { next(); });
// Register with http
http.createServer(app)
.listen(3000);
O Connect fornece uma função de utilitário para se registrar, http
para que você não precise fazer a chamada http.createServer(app)
. É chamado listen
e o código simplesmente cria um novo servidor http, o registrador se conecta como retorno de chamada e encaminha os argumentos para http.listen
. De origem
app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
Então, você pode fazer:
var connect = require('connect');
// Create a connect dispatcher and register with http
var app = connect()
.listen(3000);
console.log('server running on port 3000');
Ainda é bom para você, http.createServer
com uma estrutura de plugins no topo.
ExpressJS e connect são projetos paralelos. O Connect é apenas uma estrutura de middleware, com uma boa use
função. O Express não depende do Connect ( consulte package.json ). No entanto, ele faz tudo o que conectar, ou seja:
createServer
like connect, pois também é apenas uma função que pode levar um req
/ res
par ( fonte ).listen
função utilitária para se registrar com httpAlém do que o connect fornece (que expressa duplicatas), ele possui muitos outros recursos. por exemplo
A use
função do ExpressJS e connect é compatível e, portanto, o middleware é compartilhado . Ambas são estruturas de middleware, o Express tem mais do que uma estrutura de middleware simples .
Minha opinião: você está informado o suficiente ^ com base no acima ^ para fazer sua própria escolha.
http.createServer
se você estiver criando algo como connect / expressjs do zero.http.createServer
A maioria das pessoas deve usar o ExpressJS.
Isso pode ter sido verdade em algum momento, mas errado agora:
que herda uma versão estendida do http.Server
Errado. Não estende e como você viu ... usa
Express faz para conectar o que o Connect faz ao módulo http
O Express 4.0 nem depende da conexão. consulte a seção atual das dependências package.json
O Node.js é um motor javascript para o lado do servidor.
Além de todos os recursos js, inclui recursos de rede (como HTTP) e acesso ao sistema de arquivos.
Isso é diferente dos js do lado do cliente, onde as tarefas de rede são monopolizadas pelo navegador e o acesso ao sistema de arquivos é proibido por razões de segurança.
Algo que roda no servidor, entende HTTP e pode acessar arquivos, soa como um servidor web. Mas não é um.
Para fazer o node.js se comportar como um servidor web, é necessário programá-lo: manipule as solicitações HTTP recebidas e forneça as respostas apropriadas.
É isso que o Express faz: é a implementação de um servidor web em js.
Portanto, implementar um site é como configurar rotas Express e programar os recursos específicos do site.
Servir páginas envolve várias tarefas. Muitas dessas tarefas são bem conhecidas e muito comuns; portanto, o módulo Connect do nó (um dos muitos módulos disponíveis para execução no nó) implementa essas tarefas.
Veja a atual oferta impressionante:
O Connect é a estrutura e, através dela, você pode escolher os (sub) módulos necessários.
A página Contrib Middleware enumera uma longa lista de middlewares adicionais .
O Express em si é fornecido com os middlewares Connect mais comuns.
Instale o node.js.
O nó vem com o npm , o gerenciador de pacotes do nó .
O comando npm install -g express
fará o download e instalará o express globalmente (consulte o guia expresso ).
A execução express foo
em uma linha de comando (não no nó) criará um aplicativo pronto para execução chamado foo. Mude para o diretório (recém-criado) e execute-o com o nó com o comando node <appname>
, abra http://localhost:3000
e veja. Agora você está dentro
Node.js
propriamente dito oferece um módulo HTTP, cujo método createServer retorna um objeto que você pode usar para responder a solicitações HTTP. Esse objeto herda o http.Server
protótipo.
Informações relacionadas, especialmente se você estiver usando o NTVS para trabalhar com o Visual Studio IDE. O NTVS adiciona as ferramentas NodeJS e Express, andaimes e modelos de projeto ao Visual Studio 2012, 2013.
Além disso, a verbosidade que chama ExpressJS ou Connect como um "servidor da Web" está incorreta. Você pode criar um servidor Web básico com ou sem eles. Um programa básico do NodeJS também pode usar o módulo http para lidar com solicitações http, tornando-se um servidor da web rudimentar.
middleware como o nome sugere, na verdade, o middleware fica entre o meio e o meio? meio da solicitação e resposta .. como pedido, resposta, servidor expresso, sente-se no aplicativo expresso nesta imagem, você pode ver as solicitações provenientes do cliente, em seguida, o servidor do servidor expresso atende a essas solicitações .. então vamos nos aprofundar .. na verdade, podemos dividir isso toda a tarefa do servidor expresso em pequenas tarefas separadas, como desta maneira. como o middleware fica entre a solicitação e a resposta, pequeno pedaço de parte do servidor executando alguma tarefa específica e passando a solicitação para a próxima. finalmente, executando todas as tarefas que a resposta foi feita. todo o middleware pode acessar o objeto de solicitação, o objeto de resposta e a próxima função da solicitação ciclo de resposta ..
este é um bom exemplo para explicar o middleware no vídeo expresso do youtube para middleware