É possível usar a seleção de jQuery / manipulação DOM no lado do servidor usando o Node.js.
javascript
jquery
node.js
John
fonte
fonte
Respostas:
Atualização (27-jun-18) : Parece que houve uma grande atualização
jsdom
que faz com que a resposta original não funcione mais. Encontrei esta resposta que explica como usarjsdom
agora. Copiei o código relevante abaixo.Nota: A resposta original não menciona que você precisará instalar o jsdom também usando
npm install jsdom
Atualização (final de 2013) : A equipe oficial do jQuery finalmente assumiu o gerenciamento do
jquery
pacote no npm:Então:fonte
require("...").env is not a function
.TypeError: require(...).env is not a function
Sim, você pode, usando uma biblioteca que criei chamada nodeQuery
fonte
, express = Express.createServer();
eTypeError: Express.createServer is not a function
alguma idéia?npm install --save express
no seu prompt de comando.No momento em que escrevo, também existe o Cheerio mantido .
fonte
:gt(1)
Agora, usando jsdom, você pode. Veja o exemplo de jquery no diretório examples.
fonte
Um rastreador simples usando Cheerio
Esta é minha fórmula para criar um rastreador simples no Node.js. É o principal motivo para querer manipular o DOM no servidor e, provavelmente, é o motivo pelo qual você chegou aqui.
Primeiro, use
request
para baixar a página a ser analisada. Quando o download estiver concluído, manipule-ocheerio
e inicie a manipulação do DOM, assim como o jQuery.Exemplo de trabalho:
Este exemplo imprimirá no console todas as principais perguntas exibidas na home page do SO. É por isso que eu amo o Node.js e sua comunidade. Não poderia ficar mais fácil do que isso :-)
Instale dependências:
E execute (assumindo que o script acima esteja no arquivo
crawler.js
):Codificação
Algumas páginas terão conteúdo em inglês em uma determinada codificação e você precisará decodificá-lo
UTF-8
. Por exemplo, uma página em português do Brasil (ou qualquer outro idioma de origem latina) provavelmente será codificada emISO-8859-1
(aka "latin1"). Quando a decodificação é necessária, digorequest
para não interpretar o conteúdo de nenhuma maneira e, em vez disso, usoiconv-lite
para fazer o trabalho.Exemplo de trabalho:
Antes de executar, instale dependências:
E finalmente:
Links a seguir
O próximo passo seria seguir os links. Digamos que você queira listar todos os pôsteres de cada pergunta principal no SO. Você deve primeiro listar todas as perguntas principais (exemplo acima) e depois inserir cada link, analisando a página de cada pergunta para obter a lista de usuários envolvidos.
Quando você começa a seguir os links, um inferno de retorno de chamada pode começar. Para evitar isso, você deve usar algum tipo de promessas, futuros ou o que for. Eu sempre assíncrono no meu cinto de ferramentas. Então, aqui está um exemplo completo de um rastreador usando assíncrono:
Antes de executar:
Execute um teste:
Saída de amostra:
E esse é o básico que você deve saber para começar a criar seus próprios rastreadores :-)
Bibliotecas usadas
fonte
em 2016 as coisas são muito mais fáceis. instale o jquery no node.js com seu console:
vincule-o à variável
$
(por exemplo - eu estou acostumado) no código node.js:Fazer coisas:
também funciona para o gulp, pois é baseado no node.js.
fonte
var $ = require("jquery"); $.ajax // undefined
(com voto negativo no momento).npm install jquery
primeiro?> console.log(require("jquery").toString());
dá-me a função de fábrica:function ( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }
eu tive que usar a resposta acima com jsdom: stackoverflow.com/a/4129032/539490Eu acredito que a resposta para isso é agora sim.
https://github.com/tmpvar/jsdom
fonte
npm install jquery --save
#note TUDO EM BAIXOnpm install jsdom --save
fonte
O módulo jQuery pode ser instalado usando:
Exemplo:
Referências do jQuery no Node.js **:
fonte
Você deve obter a janela usando a nova API JSDOM.
fonte
...
) deve ser .JSDOM ("<! DOCTYPE html>") para suporte ao HTML5?ATENÇÃO
Esta solução, como mencionado por Golo Roden, não está correta . É apenas uma solução rápida para ajudar as pessoas a executar o código jQuery real usando uma estrutura de aplicativo Node, mas não é a filosofia do Node porque o jQuery ainda está sendo executado no lado do cliente e não no lado do servidor. Sinto muito por dar uma resposta errada.
Você também pode renderizar o Jade com o nó e inserir seu código jQuery. Aqui está o código do arquivo jade:
fonte
Meu código de trabalho é:
e depois:
ou se a janela estiver presente, então:
fonte
O módulo jsdom é uma ótima ferramenta. Mas se você deseja avaliar páginas inteiras e fazer algumas coisas divertidas no lado do servidor, sugiro executá-las em seu próprio contexto:
Portanto, coisas como
require
/CommonJS
no site não afetarão o processo do Node.Você pode encontrar documentação aqui . Felicidades!
fonte
A partir do jsdom v10, a função .env () está obsoleta. Fiz isso como abaixo, depois de tentar várias coisas para exigir o jquery:
Espero que isso ajude você ou qualquer pessoa que esteja enfrentando esse tipo de problema.
fonte
TypeError: JSDOM is not a constructor
$.each
. Eu apenas incluí estas linhas e depois fiz o seguinte:$.each(errors, function (ind,error) { res.send(error.msg);console.log(error.msg); });
Espero que ajude !!Antes de tudo, instale-o
Após a instalação, você pode usá-lo como abaixo
Você pode conferir um tutorial completo que escrevi aqui: https://medium.com/fbdevclagos/how-to-use-jquery-on-node-df731bd6abc7
fonte
Nenhuma dessas soluções me ajudou no meu aplicativo Electron.
Minha solução (solução alternativa):
No seu
index.js
arquivo:Nos seus
.js
arquivos, escreva suas funções jQuery desta maneira:fonte
Sim,
jQuery
pode ser usado comNode.js
.Etapas para incluir o jQuery no projeto do nó: -
npm i jquery --save
Incluir jquery nos códigosEu uso jquery em projetos node.js o tempo todo, especificamente no projeto da extensão chrome.
por exemplo, https://github.com/fxnoob/gesture-control-chrome-extension/blob/master/src/default_plugins/tab.js
fonte
Não. Será um grande esforço portar um ambiente de navegador para o nó.
Outra abordagem, que estou investigando atualmente para testes de unidade, é criar a versão "Mock" do jQuery que fornece retornos de chamada sempre que um seletor é chamado.
Dessa forma, você poderia testar seus plugins jQuery sem realmente ter um DOM. Você ainda precisará testar em navegadores reais para ver se seu código funciona de maneira natural, mas se descobrir problemas específicos do navegador, poderá facilmente "zombar" daqueles dos testes de unidade.
Vou empurrar algo para o github.com/felixge assim que estiver pronto para ser exibido.
fonte
Você pode usar o Electron , ele permite que o navegador híbridojs e nodejs.
Antes, tentei usar o canvas2d no nodejs, mas finalmente desisti. Não é suportado pelo padrão nodejs, e é muito difícil de instalá-lo (muitos ... dependentes). Até usar o Electron, posso facilmente usar todo o meu código anterior do navegadorjs, até o WebGL, e passar o valor do resultado (por exemplo, dados da imagem do resultado base64) para o código do nodejs.
fonte
Não que eu saiba. O DOM é uma coisa do lado do cliente (o jQuery não analisa o HTML, mas o DOM).
Aqui estão alguns projetos atuais do Node.js.
https://github.com/ry/node/wiki ( https://github.com/nodejs/node )
E o djangode do SimonW é bem legal ...
fonte
Uma alternativa é usar Underscore.js . Ele deve fornecer o que você poderia querer do lado do servidor do JQuery.
fonte