Apakah mungkin untuk menggunakan penyeleksi jQuery / manipulasi DOM di sisi server menggunakan Node.js?
javascript
jquery
node.js
John
sumber
sumber
Jawaban:
Pembaruan (27-Juni-18) : Sepertinya ada pembaruan besar
jsdom
yang menyebabkan jawaban asli tidak lagi berfungsi. Saya menemukan jawaban ini yang menjelaskan cara menggunakanjsdom
sekarang. Saya telah menyalin kode yang relevan di bawah ini.Catatan: Jawaban awal gagal menyebutkan bahwa Anda perlu menginstal jsdom juga
npm install jsdom
Pembaruan (akhir 2013) : Tim jQuery resmi akhirnya mengambil alih pengelolaan
jquery
paket pada npm:Kemudian:sumber
require("...").env is not a function
.TypeError: require(...).env is not a function
Ya Anda bisa, menggunakan perpustakaan yang saya buat bernama nodeQuery
sumber
, express = Express.createServer();
danTypeError: Express.createServer is not a function
ada ide?npm install --save express
di command prompt Anda.Pada saat penulisan juga ada Cheerio yang dipelihara .
sumber
:gt(1)
Menggunakan jsdom sekarang Anda bisa. Lihat saja contoh jquery mereka di direktori contoh.
sumber
Perayap sederhana menggunakan Cheerio
Ini adalah rumus saya untuk membuat perayap sederhana di Node.js. Ini adalah alasan utama untuk ingin melakukan manipulasi DOM di sisi server dan mungkin itulah alasan mengapa Anda sampai di sini.
Pertama, gunakan
request
untuk mengunduh halaman yang akan diuraikan. Saat unduhan selesai, tangani untukcheerio
dan mulai manipulasi DOM seperti menggunakan jQuery.Contoh kerja:
Contoh ini akan mencetak ke konsol semua pertanyaan teratas yang ditampilkan di halaman beranda SO. Inilah sebabnya saya suka Node.js dan komunitasnya. Tidak bisa lebih mudah dari itu :-)
Instal dependensi:
Dan jalankan (dengan asumsi skrip di atas ada dalam file
crawler.js
):Pengkodean
Beberapa halaman akan memiliki konten non-Inggris dalam penyandian tertentu dan Anda harus mendekodekannya
UTF-8
. Misalnya, halaman dalam bahasa Portugis Brasil (atau bahasa latin lainnya) kemungkinan akan dikodekan dalamISO-8859-1
(alias "latin1"). Ketika decoding diperlukan, saya katakanrequest
untuk tidak menafsirkan konten dengan cara apa pun dan alih-alih menggunakannyaiconv-lite
untuk melakukan pekerjaan itu.Contoh kerja:
Sebelum berjalan, instal dependensi:
Dan akhirnya:
Tautan berikut
Langkah selanjutnya adalah mengikuti tautan. Katakanlah Anda ingin mendaftar semua poster dari setiap pertanyaan teratas di SO. Anda harus terlebih dahulu mendaftar semua pertanyaan teratas (contoh di atas) dan kemudian memasukkan setiap tautan, mem-parsing setiap halaman pertanyaan untuk mendapatkan daftar pengguna yang terlibat.
Ketika Anda mulai mengikuti tautan, neraka panggilan balik dapat dimulai. Untuk menghindarinya, Anda harus menggunakan semacam janji, masa depan atau apa pun. Saya selalu menyimpan async di sabuk alat saya. Jadi, berikut adalah contoh lengkap perayap menggunakan async:
Sebelum berjalan:
Jalankan tes:
Output sampel:
Dan itulah dasar yang harus Anda ketahui untuk mulai membuat crawler Anda sendiri :-)
Perpustakaan digunakan
sumber
di 2016 segalanya lebih mudah. instal jquery ke node.js dengan konsol Anda:
ikat ke variabel
$
(misalnya - saya sudah terbiasa) dalam kode node.js Anda:lakukan hal-hal:
juga bekerja untuk tegukan karena didasarkan pada node.js.
sumber
var $ = require("jquery"); $.ajax // undefined
(Diturunkan untuk saat ini).npm install jquery
terlebih dahulu?> console.log(require("jquery").toString());
memberi saya fungsi pabrik:function ( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }
Saya harus menggunakan jawaban di atas dengan jsdom: stackoverflow.com/a/4129032/539490Saya yakin jawabannya sekarang ya.
https://github.com/tmpvar/jsdom
sumber
npm install jquery --save
#catat SEMUA RENDAH KASUSnpm install jsdom --save
sumber
Modul jQuery dapat diinstal menggunakan:
Contoh:
Referensi jQuery di Node.js **:
sumber
Anda harus mendapatkan jendela menggunakan API JSDOM baru.
sumber
...
) harus .JSDOM ("<! DOCTYPE html>") untuk dukungan HTML5?PERINGATAN
Solusi ini, seperti yang disebutkan oleh Golo Roden tidak benar . Ini hanya perbaikan cepat untuk membantu orang agar kode jQuery mereka yang sebenarnya berjalan menggunakan struktur aplikasi Node, tetapi itu bukan filosofi Node karena jQuery masih berjalan di sisi klien alih-alih di sisi server. Saya minta maaf karena memberikan jawaban yang salah.
Anda juga dapat membuat Jade dengan simpul dan memasukkan kode jQuery Anda di dalamnya. Ini adalah kode dari file jade:
sumber
Kode kerja saya adalah:
lalu:
atau jika jendela ada, maka:
sumber
Modul jsdom adalah alat yang hebat. Tetapi jika Anda ingin mengevaluasi seluruh halaman dan melakukan beberapa hal funky di sisi server saya sarankan menjalankannya dalam konteks mereka sendiri:
Jadi hal-hal seperti
require
/CommonJS
di situs tidak akan meledakkan proses Node Anda sendiri.Anda dapat menemukan dokumentasi di sini . Bersulang!
sumber
Pada jsdom v10, fungsi .env () sudah tidak digunakan lagi. Saya melakukannya seperti di bawah ini setelah mencoba banyak hal yang memerlukan jquery:
Semoga ini bisa membantu Anda atau siapa saja yang pernah menghadapi masalah seperti ini.
sumber
TypeError: JSDOM is not a constructor
$.each
. Saya baru saja memasukkan baris-baris ini dan kemudian melakukannya seperti di bawah ini:$.each(errors, function (ind,error) { res.send(error.msg);console.log(error.msg); });
Semoga ini bisa membantu !!Pertama-tama instal
Setelah menginstalnya, Anda dapat menggunakannya seperti di bawah ini
Anda dapat melihat tutorial lengkap yang saya tulis di sini: https://medium.com/fbdevclagos/how-to-use-jquery-on-node-df731bd6abc7
sumber
Tidak satu pun dari solusi ini yang membantu saya dalam Aplikasi Elektron saya.
Solusi saya (solusi):
Dalam
index.js
file Anda :Dalam
.js
file Anda, tuliskan fungsi jQuery Anda dengan cara ini:sumber
Ya,
jQuery
bisa digunakan bersamaNode.js
.Langkah-langkah untuk memasukkan jQuery dalam proyek simpul: -
npm i jquery --save
Sertakan jquery dalam kodeSaya menggunakan jquery di proyek node.js sepanjang waktu khususnya di proyek ekstensi chrome.
mis. https://github.com/fxnoob/gesture-control-chrome-extension/blob/master/src/default_plugins/tab.js
sumber
Tidak. Ini akan menjadi upaya yang cukup besar untuk port lingkungan browser ke node.
Pendekatan lain, yang saya sedang selidiki untuk pengujian unit, adalah membuat versi "Mock" dari jQuery yang menyediakan panggilan balik setiap kali seorang pemilih dipanggil.
Dengan cara ini Anda dapat menguji unit plugin jQuery Anda tanpa benar-benar memiliki DOM. Anda masih harus menguji di peramban nyata untuk melihat apakah kode Anda berfungsi di alam bebas, tetapi jika Anda menemukan masalah khusus peramban, Anda dapat dengan mudah "mengejek" yang ada di unit test Anda juga.
Saya akan mendorong sesuatu ke github.com/felixge setelah siap untuk ditampilkan.
sumber
Anda dapat menggunakan Electron , ini memungkinkan browser hybrid dan node.
Sebelumnya, saya mencoba menggunakan canvas2d di nodejs, tetapi akhirnya saya menyerah. Ini tidak didukung oleh nodejs default, dan terlalu sulit untuk menginstalnya (banyak banyak ... dependeces). Sampai saya menggunakan Electron, saya dapat dengan mudah menggunakan semua kode browserjs saya sebelumnya, bahkan WebGL, dan meneruskan nilai hasil (mis. Data base64 hasil gambar) ke kode nodejs.
sumber
Tidak yang saya tahu. DOM adalah hal sisi klien (jQuery tidak mem-parsing HTML, tetapi DOM).
Berikut adalah beberapa proyek Node.js saat ini:
https://github.com/ry/node/wiki ( https://github.com/nodejs/node )
Dan djangode SimonW sangat keren ...
sumber
Alternatifnya adalah menggunakan Underscore.js . Itu harus memberikan apa yang Anda inginkan dari sisi server dari JQuery.
sumber