Node.js ব্যবহার করে সার্ভার-সাইডে jQuery নির্বাচনকারী / DOM ম্যানিপুলেশন ব্যবহার করা সম্ভব?
Node.js ব্যবহার করে সার্ভার-সাইডে jQuery নির্বাচনকারী / DOM ম্যানিপুলেশন ব্যবহার করা সম্ভব?
উত্তর:
আপডেট (২--জুন -১:) : দেখে মনে হচ্ছে এমন কোনও বড় আপডেট রয়েছে jsdom
যা মূল উত্তরটি আর কাজ করে না। আমি এই উত্তরটি পেয়েছি যা jsdom
এখন কীভাবে ব্যবহার করতে হবে তা ব্যাখ্যা করে । আমি নীচে প্রাসঙ্গিক কোড অনুলিপি করেছি।
var jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;
var $ = jQuery = require('jquery')(window);
দ্রষ্টব্য: মূল উত্তরটি উল্লেখ করতে ব্যর্থ হয়েছে যে এটির পাশাপাশি আপনাকে জেসডম ইনস্টল করতে হবেnpm install jsdom
আপডেট (দেরি 2013) : সরকারী jQuery টিম শেষ পর্যন্ত jquery
এনপিএমে প্যাকেজটির পরিচালনা গ্রহণ করেছে :
npm install jquery
তারপর:
require("jsdom").env("", function (err, window) {
if (err) {
console.error(err);
return;
}
var $ = require("jquery")(window);
});
require("...").env is not a function
।
TypeError: require(...).env is not a function
হ্যাঁ আপনি করতে পারেন, আমি তৈরি করেছি এমন একটি লাইব্রেরি যা নোডকুইয়ারি নামে পরিচিত using
var Express = require('express')
, dnode = require('dnode')
, nQuery = require('nodeQuery')
, express = Express.createServer();
var app = function ($) {
$.on('ready', function () {
// do some stuff to the dom in real-time
$('body').append('Hello World');
$('body').append('<input type="text" />');
$('input').live('click', function () {
console.log('input clicked');
// ...
});
});
};
nQuery
.use(app);
express
.use(nQuery.middleware)
.use(Express.static(__dirname + '/public'))
.listen(3000);
dnode(nQuery.middleware).listen(express);
, express = Express.createServer();
এবং TypeError: Express.createServer is not a function
কোনও ধারণা?
npm install --save express
আপনার কমান্ড প্রম্পটে চেষ্টা করুন ।
লেখার সময় সেখানে রক্ষণাবেক্ষণ করা চেরিও রয়েছে ।
সার্ভারের জন্য বিশেষভাবে ডিজাইন করা কোর jQuery এর দ্রুত, নমনীয় এবং হেলান বাস্তবায়ন।
:gt(1)
আপনি এখন করতে পারেন jsdom ব্যবহার করে । উদাহরণ ডিরেক্টরিতে কেবল তাদের jquery উদাহরণ দেখুন।
নোড.জেএস-তে একটি সরল ক্রলার তৈরি করার এটি আমার সূত্র is এটি সার্ভারের পাশে ডিওএম ম্যানিপুলেশন করতে চাওয়ার মূল কারণ এবং সম্ভবত আপনি এখানে আসার কারণ এটি।
প্রথমে request
পৃষ্ঠাটি বিশ্লেষণ করতে ডাউনলোড করতে ব্যবহার করুন । ডাউনলোডটি সম্পূর্ণ হয়ে গেলে, এটিতে হ্যান্ডেল করুন cheerio
এবং ডকুমের হেরফের শুরু করুন যেমন jQuery ব্যবহার করার মতো।
কাজের উদাহরণ:
var
request = require('request'),
cheerio = require('cheerio');
function parse(url) {
request(url, function (error, response, body) {
var
$ = cheerio.load(body);
$('.question-summary .question-hyperlink').each(function () {
console.info($(this).text());
});
})
}
parse('http://stackoverflow.com/');
এই উদাহরণটি এসও হোম পৃষ্ঠায় প্রদর্শিত সমস্ত শীর্ষ প্রশ্নের কনসোলে মুদ্রণ করবে। এই কারণেই আমি নোড.জেএস এবং এর সম্প্রদায়কে ভালবাসি। এটি এর চেয়ে সহজতর হতে পারে না :-)
নির্ভরতা ইনস্টল করুন:
এনপিএম অনুরোধ চিয়ারিও ইনস্টল করুন
এবং চালান (উপরের স্ক্রিপ্টটি ফাইলটিতে রয়েছে ধরে নেওয়া crawler.js
):
নোড crawler.js
কিছু পৃষ্ঠাগুলিতে একটি নির্দিষ্ট এনকোডিং-এ অ-ইংরাজী সামগ্রী থাকবে এবং আপনার এটিকে ডিকোড করতে হবে UTF-8
। উদাহরণস্বরূপ, ব্রাজিলিয়ান পর্তুগিজ (বা লাতিন উত্সের অন্য কোনও ভাষা) এর একটি পৃষ্ঠা সম্ভবত এনকোড করা হবে ISO-8859-1
(ওরফে "ল্যাটিন 1")। যখন ডিকোডিংয়ের দরকার হয় তখন আমি request
কন্টেন্টটি কোনও উপায়ে ব্যাখ্যা না করে পরিবর্তে ব্যবহার করতে বলিiconv-lite
কাজটি করতে ।
কাজের উদাহরণ:
var
request = require('request'),
iconv = require('iconv-lite'),
cheerio = require('cheerio');
var
PAGE_ENCODING = 'utf-8'; // change to match page encoding
function parse(url) {
request({
url: url,
encoding: null // do not interpret content yet
}, function (error, response, body) {
var
$ = cheerio.load(iconv.decode(body, PAGE_ENCODING));
$('.question-summary .question-hyperlink').each(function () {
console.info($(this).text());
});
})
}
parse('http://stackoverflow.com/');
চলমান আগে, নির্ভরতা ইনস্টল করুন:
এনপিএম ইনস্টল অনুরোধ আইকনভিউ-লাইট চিয়ারিও
এবং তারপরে অবশেষে:
নোড crawler.js
পরবর্তী পদক্ষেপটি লিঙ্কগুলি অনুসরণ করা হবে। বলুন আপনি এসও-তে প্রতিটি শীর্ষ প্রশ্নের সমস্ত পোস্টার তালিকাবদ্ধ করতে চান। আপনাকে প্রথমে সমস্ত শীর্ষ প্রশ্নের তালিকা তৈরি করতে হবে (উপরে উদাহরণস্বরূপ) এবং তারপরে জড়িত ব্যবহারকারীর তালিকা পেতে প্রতিটি লিঙ্ক প্রবেশ করে প্রতিটি প্রশ্নের পৃষ্ঠাগুলি পার্স করে।
আপনি লিঙ্কগুলি অনুসরণ করা শুরু করার পরে, কলব্যাক হেলিক শুরু হতে পারে। তা এড়াতে আপনার কিছু প্রকার প্রতিশ্রুতি, ফিউচার বা যা কিছু ব্যবহার করা উচিত। আমি সবসময় রাখা ASYNC আমার toolbelt হবে। সুতরাং, এখানে অ্যাসিঙ্ক ব্যবহার করে ক্রলারের পুরো উদাহরণটি রয়েছে:
var
url = require('url'),
request = require('request'),
async = require('async'),
cheerio = require('cheerio');
var
baseUrl = 'http://stackoverflow.com/';
// Gets a page and returns a callback with a $ object
function getPage(url, parseFn) {
request({
url: url
}, function (error, response, body) {
parseFn(cheerio.load(body))
});
}
getPage(baseUrl, function ($) {
var
questions;
// Get list of questions
questions = $('.question-summary .question-hyperlink').map(function () {
return {
title: $(this).text(),
url: url.resolve(baseUrl, $(this).attr('href'))
};
}).get().slice(0, 5); // limit to the top 5 questions
// For each question
async.map(questions, function (question, questionDone) {
getPage(question.url, function ($$) {
// Get list of users
question.users = $$('.post-signature .user-details a').map(function () {
return $$(this).text();
}).get();
questionDone(null, question);
});
}, function (err, questionsWithPosters) {
// This function is called by async when all questions have been parsed
questionsWithPosters.forEach(function (question) {
// Prints each question along with its user list
console.info(question.title);
question.users.forEach(function (user) {
console.info('\t%s', user);
});
});
});
});
দৌড়ানোর আগে:
এনপিএম অনুরোধ async চেরিও ইনস্টল
একটি পরীক্ষা চালান:
নোড crawler.js
নমুনা আউটপুট:
Is it possible to pause a Docker image build?
conradk
Thomasleveil
PHP Image Crop Issue
Elyor
Houston Molinar
Add two object in rails
user1670773
Makoto
max
Asymmetric encryption discrepancy - Android vs Java
Cookie Monster
Wand Maker
Objective-C: Adding 10 seconds to timer in SpriteKit
Christian K Rider
এবং এটি আপনার নিজের ক্রলার তৈরি শুরু করার জন্য আপনার প্রাথমিক জানা উচিত :-)
২০১ 2016 সালে জিনিসগুলি সহজ উপায়। আপনার কনসোল দিয়ে node.js এ jquery ইনস্টল করুন:
npm install jquery
$
আপনার নোড.জেএস কোডে এটিকে চলকের সাথে আবদ্ধ করুন (উদাহরণস্বরূপ - আমি এটিতে অভ্যস্ত)
var $ = require("jquery");
স্টাফ কর:
$.ajax({
url: 'gimme_json.php',
dataType: 'json',
method: 'GET',
data: { "now" : true }
});
এটি নলড.জেএস-এর উপর ভিত্তি করে গাল্পের জন্যও কাজ করে
var $ = require("jquery"); $.ajax // undefined
(মুহূর্তের জন্য ডাউনভোটেড)।
npm install jquery
প্রথম করেছেন?
> console.log(require("jquery").toString());
আমাকে দেয় কারখানা ফাংশন: function ( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }
আমি jsdom সাথে উপরে উত্তর ব্যবহার করতে ছিল: stackoverflow.com/a/4129032/539490
আমি বিশ্বাস করি এর উত্তর এখন হ্যাঁ।
https://github.com/tmpvar/jsdom
var navigator = { userAgent: "node-js" };
var jQuery = require("./node-jquery").jQueryInit(window, navigator);
npm install jquery --save
# সমস্ত নিম্নচাপের নোট
npm install jsdom --save
const jsdom = require("jsdom");
const dom = new jsdom.JSDOM(`<!DOCTYPE html>`);
var $ = require("jquery")(dom.window);
$.getJSON('https://api.github.com/users/nhambayi',function(data) {
console.log(data);
});
jQuery মডিউলটি ব্যবহার করে ইনস্টল করা যেতে পারে:
npm install jquery
উদাহরণ:
var $ = require('jquery');
var http = require('http');
var options = {
host: 'jquery.com',
port: 80,
path: '/'
};
var html = '';
http.get(options, function(res) {
res.on('data', function(data) {
// collect the data chunks to the variable named "html"
html += data;
}).on('end', function() {
// the whole of webpage data has been collected. parsing time!
var title = $(html).find('title').text();
console.log(title);
});
});
নোড.জেএস **-এ jQuery এর তথ্যসূত্র:
নতুন JSDOM এপিআই ব্যবহার করে আপনাকে উইন্ডোটি পেতে হবে।
const jsdom = require("jsdom");
const { window } = new jsdom.JSDOM(`...`);
var $ = require("jquery")(window);
...
HTML5 সমর্থন করার জন্য .JSDOM ( ) হওয়া উচিত .JSDOM ("<! DOCTYPE html>")?
সতর্কতামূলক
এই সমাধানটি, যেমন গলো রডেন উল্লেখ করেছেন সঠিক নয় । কোনও নোড অ্যাপ স্ট্রাকচার ব্যবহার করে লোকেরা তাদের আসল jQuery কোড চালিয়ে যেতে সাহায্য করার জন্য এটি কেবলমাত্র দ্রুত সমাধান, তবে এটি নোড দর্শন নয় কারণ jQuery এখনও সার্ভার সাইডের পরিবর্তে ক্লায়েন্টের দিকে চলছে। আমি একটি ভুল উত্তর দেওয়ার জন্য দুঃখিত।
আপনি জেডকে নোড সহ রেন্ডার করতে পারেন এবং আপনার jQuery কোডটি ভিতরে রাখতে পারেন। জেড ফাইলের কোডটি এখানে:
!!! 5
html(lang="en")
head
title Holamundo!
script(type='text/javascript', src='http://code.jquery.com/jquery-1.9.1.js')
body
h1#headTitle Hello, World
p#content This is an example of Jade.
script
$('#headTitle').click(function() {
$(this).hide();
});
$('#content').click(function() {
$(this).hide();
});
মডিউল jsdom একটি দুর্দান্ত সরঞ্জাম। তবে আপনি যদি পুরো পৃষ্ঠাগুলির মূল্যায়ন করতে এবং সেগুলির জন্য কিছু সরল জিনিস করতে চান তবে আমি তাদের তাদের নিজস্ব প্রসঙ্গে চালানোর পরামর্শ দিচ্ছি:
vm.runInContext
সুতরাং সাইটের মতো require
/ CommonJS
সাইটে আপনার নোড প্রক্রিয়াটি নিজেই ফুঁকবে না।
আপনি এখানে ডকুমেন্টেশন খুঁজে পেতে পারেন । চিয়ার্স!
Jsdom v10 অনুসারে, .env () ফাংশনটি অবচিত করা হয়েছে। Jquery এর জন্য প্রয়োজনীয় অনেকগুলি চেষ্টা করার পরে আমি নীচের মতো করেছিলাম:
var jsdom = require('jsdom');
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;
var $ = jQuery = require('jquery')(window);
আশা করি এটি আপনাকে বা যে কেউ এই ধরণের সমস্যার মুখোমুখি হয়েছে সহায়তা করে।
TypeError: JSDOM is not a constructor
$.each
। আমি এই লাইনগুলি কেবল অন্তর্ভুক্ত করেছি এবং তারপরে নীচের মতো করেছিলাম: $.each(errors, function (ind,error) { res.send(error.msg);console.log(error.msg); });
আশা করি এটি সহায়তা করে !!
সবার আগে এটি ইনস্টল করুন
npm install jquery -S
এটি ইনস্টল করার পরে, আপনি এটি নীচের হিসাবে ব্যবহার করতে পারেন
import $ from 'jquery';
window.jQuery = window.$ = $;
$(selector).hide();
আমি এখানে লিখেছি এমন একটি সম্পূর্ণ টিউটোরিয়াল আপনি দেখতে পারেন: https://medium.com/fbdevclagos/how-to-use-jquery-on-node-df731bd6abc7
হ্যাঁ, jQuery
ব্যবহার করা যেতে পারেNode.js
।
নোড প্রকল্পে jQuery অন্তর্ভুক্ত করার পদক্ষেপ: -
npm i jquery --save
কোডগুলিতে jquery অন্তর্ভুক্ত করুন
import jQuery from 'jquery';
const $ = jQuery;
আমি বিশেষ সময় ক্রোম এক্সটেনশনের প্রকল্পে নোড.জেএস প্রকল্পগুলিতে jquery ব্যবহার করি।
যেমন https://github.com/fxnoob/gesture-control-chrome-extension/blob/master/src/default_plugins/tab.js
না, এটি নোডে ব্রাউজারের পরিবেশের পোর্ট করার জন্য অনেক বড় প্রচেষ্টা হতে চলেছে।
আরেকটি পদ্ধতির, আমি বর্তমানে ইউনিট পরীক্ষার জন্য তদন্ত করছি, jQuery এর "মক" সংস্করণ তৈরি করা যা যখনই কোনও নির্বাচককে ডাকা হয় কলব্যাক সরবরাহ করে।
এইভাবে আপনি কোনও ডম না করেই আপনার jQuery প্লাগইনগুলি ইউনিট পরীক্ষা করতে পারেন। আপনার কোডটি বন্যে কাজ করে কিনা তা দেখতে আপনাকে এখনও সত্যিকারের ব্রাউজারগুলিতে পরীক্ষা করতে হবে, তবে আপনি যদি ব্রাউজার নির্দিষ্ট সমস্যাগুলি আবিষ্কার করেন তবে আপনি সহজেই আপনার ইউনিটের পরীক্ষায় থাকা "মক" করতে পারেন।
এটি দেখানোর জন্য প্রস্তুত হয়ে গেলে আমি github.com/felixge- তে কিছু চাপব।
আপনি ইলেক্ট্রন ব্যবহার করতে পারেন , এটি হাইব্রিড ব্রাউজার এবং নোডেজের অনুমতি দেয়।
এর আগে, আমি নোডজে ক্যানভাস 2 ডি ব্যবহার করার চেষ্টা করেছি, তবে শেষ পর্যন্ত আমি হাল ছেড়ে দিয়েছি। এটি নোডেজ ডিফল্ট দ্বারা সমর্থিত নয় এবং এটি ইনস্টল করা খুব কঠিন (অনেকগুলি ... নির্ভরতা)। যতক্ষণ না আমি ইলেক্ট্রন ব্যবহার করি, আমি সহজেই আমার পূর্ববর্তী সমস্ত ব্রাউজার কোডগুলি, এমনকি ওয়েবজিএল ব্যবহার করতে পারি এবং ফলাফল মানটি (যেমন, ফলাফল বেস 64 চিত্রের ডেটা) নোডজেস কোডটিতে পাস করতে পারি।
আমি যে জানি না। DOM একটি ক্লায়েন্টের পাশের জিনিস (jQuery এইচটিএমএল বিশ্লেষণ করে না, তবে ডিওএম)।
এখানে কিছু বর্তমান নোড.জেএস প্রকল্প রয়েছে:
https://github.com/ry/node/wiki ( https://github.com/nodejs/node )
এবং সাইমনডাব্লু এর জাঙ্গোড সুন্দর সুন্দর ...
একটি বিকল্প হ'ল অ্যান্ডস্কোর.জেএস ব্যবহার করা । এটি আপনাকে জিকুয়েরির থেকে সার্ভার-সাইডটি চেয়েছিল তা সরবরাহ করতে হবে।