নোড.জেএস এর সাথে এক্সপ্রেস ব্যবহার করার সময় জাদ থেকে কীভাবে মুক্তি পাব? আমি কেবল প্লেইন এইচটিএমএল ব্যবহার করতে চাই। অন্যান্য নিবন্ধগুলিতে আমি দেখেছি যে লোকেরা app.register () এর সুপারিশ করেছে যা এখন সর্বশেষতম সংস্করণে অবচিত।
নোড.জেএস এর সাথে এক্সপ্রেস ব্যবহার করার সময় জাদ থেকে কীভাবে মুক্তি পাব? আমি কেবল প্লেইন এইচটিএমএল ব্যবহার করতে চাই। অন্যান্য নিবন্ধগুলিতে আমি দেখেছি যে লোকেরা app.register () এর সুপারিশ করেছে যা এখন সর্বশেষতম সংস্করণে অবচিত।
উত্তর:
আপনি এটি এইভাবে করতে পারেন:
ইজেএস ইনস্টল করুন:
npm install ejs
আপনার টেম্পলেট ইঞ্জিনটি অ্যাপ্লিকেশনগুলিতে এজেএস হিসাবে সেট করুন
// app.js
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
এখন আপনার রুট ফাইলে আপনি টেম্পলেট ভেরিয়েবল নির্ধারণ করতে পারেন
// ./routes/index.js
exports.index = function(req, res){
res.render('index', { title: 'ejs' });};
তারপরে আপনি / ভিউরিটি ডিরেক্টরিতে আপনার এইচটিএমএল ভিউ তৈরি করতে পারেন।
title
এইচটিএমএল ফাইলে ভেরিয়েবল কীভাবে প্রিন্ট করবেন ?
জেড এইচটিএমএল ইনপুট গ্রহণ করে।
খাঁটি এইচটিএমএল জমা দেওয়া শুরু করতে লাইনের শেষে একটি বিন্দু যুক্ত করুন।
যদি এটি আপনার জন্য কৌশলটি করে তবে চেষ্টা করুন:
doctype html
html. // THAT DOT
<body>
<div>Hello, yes this is dog</div>
</body>
পিএস - এইচটিএমএল বন্ধ করার দরকার নেই - যা জেড স্বয়ংক্রিয়ভাবে সম্পন্ন হয়েছে।
response.sendFile
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});)
থেকে সরকারী দ্রুতগামী API উল্লেখ :
res.sendfile(path, [options], [fn]])
প্রদত্ত পথে ফাইল স্থানান্তর করুন।
ফাইলটির এক্সটেনশনের উপর ভিত্তি করে কন্টেন্ট-টাইপ প্রতিক্রিয়া শিরোনাম ক্ষেত্রটি স্বয়ংক্রিয়ভাবে ডিফল্ট হয়।
fn(err)
ট্রান্সফারটি সম্পূর্ণ হয়ে গেলে বা কোনও ত্রুটি দেখা দিলে কলব্যাক ডাকে ।
res.sendFile
HTTP ক্যাশে শিরোলেখগুলির মাধ্যমে ক্লায়েন্ট-সাইড ক্যাশে সরবরাহ করে তবে এটি সার্ভার-সাইডে ফাইলের সামগ্রীগুলি ক্যাশে করে না। উপরের কোডটি প্রতিটি অনুরোধে ডিস্কটিকে আঘাত করবে ।
sendfile
এটি আপনাকে কোনও টেম্প্লেটিং করার অনুমতি দেয় না কারণ এটি কোনও ফাইল থেকে কেবল বাইটগুলি প্রেরণ করে। আরও, আমি এই জাতীয় ব্যবহারের বিরুদ্ধে সুপারিশ sendfile
করব কারণ এর অর্থ হ'ল প্রতিবার অনুরোধ আসার সময় আপনি ডিস্কটি হিট করবেন - একটি বিশাল বাধা। উচ্চ ট্র্যাফিক পৃষ্ঠাগুলির জন্য, আপনাকে সত্যই ইন-মেমরি ক্যাচিং করা উচিত।
আমার মতে, এইচটিএমএল ফাইলগুলি পড়ার জন্য এজের মতো বৃহত্তর কিছু ব্যবহার করা কিছুটা ভারী হাতে। আমি খুব সহজেই এইচটিএমএল ফাইলগুলির জন্য আমার নিজের টেম্পলেট ইঞ্জিনটি লিখেছি। ফাইলটি এমন দেখাচ্ছে:
var fs = require('fs');
module.exports = function(path, options, fn){
var cacheLocation = path + ':html';
if(typeof module.exports.cache[cacheLocation] === "string"){
return fn(null, module.exports.cache[cacheLocation]);
}
fs.readFile(path, 'utf8', function(err, data){
if(err) { return fn(err); }
return fn(null, module.exports.cache[cacheLocation] = data);
});
}
module.exports.cache = {};
আমি আমার এইচটিএমএল ইঞ্জিনকে ফোন করেছি এবং আপনি যেভাবে এটি ব্যবহার করেন তা কেবল এইভাবে বলে:
app.engine('html', require('./htmlEngine'));
app.set('view engine', 'html');
app.register()
অবচয় করা হয়নি, টেমপ্লেট ইঞ্জিনগুলি যেভাবে হ্যান্ডেল করা হয়েছে সেভাবেapp.engine()
এক্সপ্রেস 3 পরিবর্তিত হওয়ার পরে এটির নামকরণ করা হয়েছে ।
এক্সপ্রেস 2.x টেমপ্লেট ইঞ্জিনের সামঞ্জস্যের জন্য নিম্নলিখিত মডিউল রফতানি দরকার:
exports.compile = function(templateString, options) { return a Function; };
এক্সপ্রেস 3.x টেম্পলেট ইঞ্জিনগুলির নিম্নলিখিত রফতানি করা উচিত:
exports.__express = function(filename, options, callback) { callback(err, string); };
যদি কোনও টেম্পলেট ইঞ্জিন এই পদ্ধতিটি প্রকাশ না করে তবে আপনি ভাগ্যের বাইরে নন,
app.engine()
পদ্ধতি আপনাকে কোনও ক্রিয়াকলাপকে কোনও এক্সটেনশনে ম্যাপ করতে দেয়। ধরুন আপনার একটি মার্কডাউন লাইব্রেরি রয়েছে এবং .md ফাইলগুলি রেন্ডার করতে চেয়েছিলেন তবে এই গ্রন্থাগারটি এক্সপ্রেসকে সমর্থন করে না, আপনারapp.engine()
কলটি এরকম কিছু দেখতে পারে:var markdown = require('some-markdown-library'); var fs = require('fs'); app.engine('md', function(path, options, fn){ fs.readFile(path, 'utf8', function(err, str){ if (err) return fn(err); str = markdown.parse(str).toString(); fn(null, str); }); });
যদি আপনি এমন কোনও টেম্প্লেটিং ইঞ্জিন সন্ধান করছেন যা আপনাকে 'প্লেইন' এইচটিএমএল ব্যবহার করতে দেয়, আমি doT এর পরামর্শ দিচ্ছি কারণ এটি অত্যন্ত দ্রুত ।
অবশ্যই, মনে রাখবেন যে এক্সপ্রেস 3 ভিউ মডেলটি আপনার (বা আপনার টেম্প্লেটিং ইঞ্জিন) পর্যন্ত ক্যাশে দেখার দৃশ্য ছেড়ে দেয়। উত্পাদনের পরিবেশে আপনি সম্ভবত আপনার দৃষ্টিভঙ্গি মেমরির মধ্যে ক্যাশে করতে চান যাতে আপনি প্রতিটি অনুরোধে ডিস্ক I / O করছেন না।
আপনি এক্সপ্রেস সহ ইজেএস ব্যবহার করতে পারেন যা টেমপ্লেটগুলি HTML তবে সমর্থন ভেরিয়েবল vari এক্সপ্রেসে ইজেএস কীভাবে ব্যবহার করতে হয় তার একটি ভাল টিউটোরিয়াল এখানে।
http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/
জেন্ডারের পরিবর্তে রেন্ডার ইঞ্জিনকে এইচটিএমএল গ্রহণ করতে আপনি নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করতে পারেন;
ইনস্টল একত্রীকরণ এবং টানা আপনার ডিরেক্টরির করতে।
npm install consolidate
npm install swig
আপনার app.js ফাইলটিতে নিম্নলিখিত লাইনগুলি যুক্ত করুন
var cons = require('consolidate');
// view engine setup
app.engine('html', cons.swig)
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', ‘html');
আপনার ভিউ টেমপ্লেটগুলি "ভিউ" ফোল্ডারের অভ্যন্তরে .html হিসাবে যুক্ত করুন। আপনার নোড সার্ভার পুনরায় চালু করুন এবং ব্রাউজারে অ্যাপ্লিকেশন শুরু করুন।
যদিও এটি কোনও সমস্যা ছাড়াই এইচটিএমএল রেন্ডার করবে, আমি আপনাকে জেডটি ব্যবহার করে এটি ব্যবহার করার পরামর্শ দিচ্ছি। জ্যাড একটি আশ্চর্যজনক টেম্পলেট ইঞ্জিন এবং এটি শিখতে আপনাকে আরও ভাল ডিজাইন এবং স্কেলিবিলিটি অর্জন করতে সহায়তা করবে।
প্রথমে নীচের লাইনটি ব্যবহার করে টেম্পলেট ইঞ্জিনের সামঞ্জস্য সংস্করণটি পরীক্ষা করুন
express -h
তারপরে আপনাকে তালিকা থেকে কোনও ভিউ ব্যবহার করতে হবে না view
express --no-view myapp
এখন আপনি আপনার সমস্ত এইচটিএমএল, সিএসএস, জেএস এবং চিত্রগুলি সর্বজনীন ফোল্ডারে ব্যবহার করতে পারেন।
ঠিক আছে, মনে হচ্ছে আপনি স্থির ফাইল পরিবেশন করতে চান। এবং সেই পৃষ্ঠাটির জন্য http://expressjs.com/en/starter/static-files.html রয়েছে
উদ্ভট যে কেউ ডকুমেন্টেশনের সাথে লিঙ্ক করছে না।
আপনার রুটগুলি ইতিমধ্যে সংজ্ঞায়িত করা হয়েছে বা এটি কীভাবে করবেন তা জানেন ering
app.get('*', function(req, res){
res.sendfile('path/to/your/html/file.html');
});
দ্রষ্টব্য: * সমস্ত কিছু গ্রহণ করার পরে এই রুটটি অন্য সকলের পরে রাখা উচিত।
যেহেতু জেড এইচটিএমএল সমর্থন করে, আপনি যদি মাত্র .html এক্সট করতে চান তবে আপনি এটি করতে পারেন
// app.js
app.engine('html', require('jade').renderFile);
app.set('view engine', 'html');
তারপরে আপনি কেবল জেড থেকে এইচটিএমএলে ভিউগুলিতে ফাইল পরিবর্তন করবেন।
আপনি আপনার জেড ফাইলের মধ্যে সরাসরি এইচটিএমএল ফাইল অন্তর্ভুক্ত করতে পারেন
include ../../public/index.html
আসল উত্তর: জেড ছাড়া এক্সপ্রেস জেনারেটর
আপনি যদি জেড ব্যবহার না করেই নোডজেএসে প্লেইন এইচটিএমএল ব্যবহার করতে চান .. বা যা কিছু:
var html = '<div>'
+ 'hello'
+ '</div>';
ব্যক্তিগতভাবে আমি এটি দিয়ে ভাল করছি doing
নিয়ন্ত্রণ যখন নিয়ন্ত্রণ সুবিধা। আপনি কয়েকটি কৌশল ব্যবহার করতে পারেন, যেমন '<p>' + (name || '') + '</p>'
, টের্নারি .. ইত্যাদি
আপনি যদি ব্রাউজারে ইনডেন্ট কোড চান তবে আপনি এটি করতে পারেন:
+ 'ok \
my friend \
sldkfjlsdkjf';
এবং ইচ্ছায় \ t বা at n ব্যবহার করুন। তবে আমি ছাড়া পছন্দ করি, এটি আরও দ্রুত।