জেডের পরিবর্তে এক্সপ্রেসে এইচটিএমএল ব্যবহার করা


103

নোড.জেএস এর সাথে এক্সপ্রেস ব্যবহার করার সময় জাদ থেকে কীভাবে মুক্তি পাব? আমি কেবল প্লেইন এইচটিএমএল ব্যবহার করতে চাই। অন্যান্য নিবন্ধগুলিতে আমি দেখেছি যে লোকেরা app.register () এর সুপারিশ করেছে যা এখন সর্বশেষতম সংস্করণে অবচিত।

উত্তর:


78

আপনি এটি এইভাবে করতে পারেন:

  1. ইজেএস ইনস্টল করুন:

    npm install ejs
  2. আপনার টেম্পলেট ইঞ্জিনটি অ্যাপ্লিকেশনগুলিতে এজেএস হিসাবে সেট করুন

    // app.js
    app.engine('html', require('ejs').renderFile);
    app.set('view engine', 'html');
  3. এখন আপনার রুট ফাইলে আপনি টেম্পলেট ভেরিয়েবল নির্ধারণ করতে পারেন

    // ./routes/index.js
    exports.index = function(req, res){
    res.render('index', { title: 'ejs' });};
  4. তারপরে আপনি / ভিউরিটি ডিরেক্টরিতে আপনার এইচটিএমএল ভিউ তৈরি করতে পারেন।


2
আমি সবেমাত্র নোড.জেএস ব্যবহার শুরু করেছি সমাধানটি আমার কাছে পরিষ্কার নয়। আমার একটি ছোট এইচটিএমএল ওয়েবসাইট রয়েছে। নোডমিলার ব্যবহার করে আমার সাইটের মাধ্যমে ইমেল প্রেরণের জন্য আমার নোড.জেএস দরকার। আমি প্রয়োজনীয় সবকিছু ইনস্টল করেছি। তবে, আমার ওয়েবসাইটটি এক্সপ্রেস ব্যবহার করে চালানোর জন্য অ্যাপ.জেএসএস ফাইলে কী হওয়া উচিত তা ভাবতে হবে
ইউজার 2457956

4
titleএইচটিএমএল ফাইলে ভেরিয়েবল কীভাবে প্রিন্ট করবেন ?
মাস্টার ইয়োদা

3
যদি কেউ এখনও ভাবছেন যে কীভাবে চলকটি মুদ্রণ করা যায়, যেমন @ মাস্টারওয়োদা জিজ্ঞাসা করেছেন, আপনি এটি এইচটিএমএলে এটি মুদ্রণ করতে পারেন: <% = শিরোনাম%>
মেইন

62

জেড এইচটিএমএল ইনপুট গ্রহণ করে।
খাঁটি এইচটিএমএল জমা দেওয়া শুরু করতে লাইনের শেষে একটি বিন্দু যুক্ত করুন।
যদি এটি আপনার জন্য কৌশলটি করে তবে চেষ্টা করুন:

doctype html              
html. // THAT DOT
    <body>     
        <div>Hello, yes this is dog</div>
    </body>

পিএস - এইচটিএমএল বন্ধ করার দরকার নেই - যা জেড স্বয়ংক্রিয়ভাবে সম্পন্ন হয়েছে।


7
ডক্টাইপ 5 এখন অবচয় করা হয়েছে। "ডকটিপ এইচটিএমএল" প্রথম লাইন হিসাবে ব্যবহার করুন।
স্নোরকেলজেব্রা


18

এক্সপ্রেস 3 হিসাবে আপনি কেবল ব্যবহার করতে পারেন response.sendFile

app.get('/', function (req, res) {
  res.sendfile(__dirname + '/index.html');
});)

থেকে সরকারী দ্রুতগামী API উল্লেখ :

res.sendfile(path, [options], [fn]])

প্রদত্ত পথে ফাইল স্থানান্তর করুন।

ফাইলটির এক্সটেনশনের উপর ভিত্তি করে কন্টেন্ট-টাইপ প্রতিক্রিয়া শিরোনাম ক্ষেত্রটি স্বয়ংক্রিয়ভাবে ডিফল্ট হয়। fn(err)ট্রান্সফারটি সম্পূর্ণ হয়ে গেলে বা কোনও ত্রুটি দেখা দিলে কলব্যাক ডাকে ।

সতর্কতা

res.sendFileHTTP ক্যাশে শিরোলেখগুলির মাধ্যমে ক্লায়েন্ট-সাইড ক্যাশে সরবরাহ করে তবে এটি সার্ভার-সাইডে ফাইলের সামগ্রীগুলি ক্যাশে করে না। উপরের কোডটি প্রতিটি অনুরোধে ডিস্কটিকে আঘাত করবে


2
আমি বিশ্বাস করি যে ওপি এখনও কেবলমাত্র নিয়মিত এইচটিএমএল সিনট্যাক্স সহ কিছু ধরণের টেম্প্লেটিং ব্যবহার করতে চায়। sendfileএটি আপনাকে কোনও টেম্প্লেটিং করার অনুমতি দেয় না কারণ এটি কোনও ফাইল থেকে কেবল বাইটগুলি প্রেরণ করে। আরও, আমি এই জাতীয় ব্যবহারের বিরুদ্ধে সুপারিশ sendfileকরব কারণ এর অর্থ হ'ল প্রতিবার অনুরোধ আসার সময় আপনি ডিস্কটি হিট করবেন - একটি বিশাল বাধা। উচ্চ ট্র্যাফিক পৃষ্ঠাগুলির জন্য, আপনাকে সত্যই ইন-মেমরি ক্যাচিং করা উচিত।
josh3736

1
@ জোশ ৩7366 যদি আপনি ওপি অভিপ্রায়টি সঠিকভাবে করেন তবে প্রশ্নটি উন্নত করা উচিত। আপনি প্রতিটি অনুরোধে ডিস্ক আঘাত সম্পর্কে ঠিক বলেছেন, আমি এই সত্য সম্পর্কে সতর্ক করার জন্য আমার উত্তরটি উন্নত করব। নিম্নলিখিত সম্পর্কে সতর্ক করতে আপনার উন্নতি বিবেচনা করুন: আপনি যদি একটি কাস্টমাইজড ইঞ্জিন প্রয়োগ করেন তবে আপনাকে অবশ্যই আকর্ষণীয় বৈশিষ্ট্যটি প্রয়োগ করতে হবে (যদি ইচ্ছা হয়) তবে তা এক্সপ্রেস দ্বারা পরিচালনা করা হবে না।
laconbass

17

আমার মতে, এইচটিএমএল ফাইলগুলি পড়ার জন্য এজের মতো বৃহত্তর কিছু ব্যবহার করা কিছুটা ভারী হাতে। আমি খুব সহজেই এইচটিএমএল ফাইলগুলির জন্য আমার নিজের টেম্পলেট ইঞ্জিনটি লিখেছি। ফাইলটি এমন দেখাচ্ছে:

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');

11

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 করছেন না।


দয়া করে আমার উত্তরটি একবার দেখুন, আপনার কীভাবে টেমপ্লেট ইঞ্জিনগুলি নিবন্ধিত করতে হবে তা পুরোপুরি ব্যাখ্যা করে তবে প্লেইন এইচটিএমএল ফাইল স্থানান্তর করার আরও সহজ উপায় রয়েছে।
laconbass

@ জোশ ৩৩736: আপনার "অত্যন্ত দ্রুত" হাইপারলিংক ফায়ারফক্স ৪১ এ কাজ করে তবে ক্রোমিয়াম সংস্করণ 45.0.2454.101 উবুন্টু 14.04 (-৪-বিট) পরীক্ষা চালাতে ব্যর্থ হয়। আমি ভাবছি কেন.
লনি সেরা

4

আপনি এক্সপ্রেস সহ ইজেএস ব্যবহার করতে পারেন যা টেমপ্লেটগুলি HTML তবে সমর্থন ভেরিয়েবল vari এক্সপ্রেসে ইজেএস কীভাবে ব্যবহার করতে হয় তার একটি ভাল টিউটোরিয়াল এখানে।

http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/


4

জেন্ডারের পরিবর্তে রেন্ডার ইঞ্জিনকে এইচটিএমএল গ্রহণ করতে আপনি নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করতে পারেন;

  1. ইনস্টল একত্রীকরণ এবং টানা আপনার ডিরেক্টরির করতে।

     npm install consolidate
     npm install swig
  2. আপনার 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');
  3. আপনার ভিউ টেমপ্লেটগুলি "ভিউ" ফোল্ডারের অভ্যন্তরে .html হিসাবে যুক্ত করুন। আপনার নোড সার্ভার পুনরায় চালু করুন এবং ব্রাউজারে অ্যাপ্লিকেশন শুরু করুন।

যদিও এটি কোনও সমস্যা ছাড়াই এইচটিএমএল রেন্ডার করবে, আমি আপনাকে জেডটি ব্যবহার করে এটি ব্যবহার করার পরামর্শ দিচ্ছি। জ্যাড একটি আশ্চর্যজনক টেম্পলেট ইঞ্জিন এবং এটি শিখতে আপনাকে আরও ভাল ডিজাইন এবং স্কেলিবিলিটি অর্জন করতে সহায়তা করবে।


1
জ্যাডের সাথে একমাত্র সত্যিই বড় সমস্যা হ'ল ইনডেন্টেশন। আপনি যদি এটি ভুল হয়ে থাকেন তবে কোডটি সংকলন করবে না। এছাড়াও, আমি আশ্চর্য হয়েছি কেন জেড অন্য যে কারণে এটি করা হয় তা কেবল কোড সংকুচিত হয় ...
জুন্পার

4

প্রথমে নীচের লাইনটি ব্যবহার করে টেম্পলেট ইঞ্জিনের সামঞ্জস্য সংস্করণটি পরীক্ষা করুন

express -h

তারপরে আপনাকে তালিকা থেকে কোনও ভিউ ব্যবহার করতে হবে না view

express --no-view myapp

এখন আপনি আপনার সমস্ত এইচটিএমএল, সিএসএস, জেএস এবং চিত্রগুলি সর্বজনীন ফোল্ডারে ব্যবহার করতে পারেন।


3

ঠিক আছে, মনে হচ্ছে আপনি স্থির ফাইল পরিবেশন করতে চান। এবং সেই পৃষ্ঠাটির জন্য http://expressjs.com/en/starter/static-files.html রয়েছে

উদ্ভট যে কেউ ডকুমেন্টেশনের সাথে লিঙ্ক করছে না।


"উদ্ভট যে কেউ ডকুমেন্টেশনের সাথে লিঙ্ক করছেন না" আমি সম্মত হই যে এক্সপ্রেসে ভিন্ন ভিন্ন ভাষা ব্যবহার করা তুচ্ছ বিষয়।
পিক্সেল 67

1

আপনার রুটগুলি ইতিমধ্যে সংজ্ঞায়িত করা হয়েছে বা এটি কীভাবে করবেন তা জানেন ering

app.get('*', function(req, res){
    res.sendfile('path/to/your/html/file.html');
});

দ্রষ্টব্য: * সমস্ত কিছু গ্রহণ করার পরে এই রুটটি অন্য সকলের পরে রাখা উচিত।


1

যেহেতু জেড এইচটিএমএল সমর্থন করে, আপনি যদি মাত্র .html এক্সট করতে চান তবে আপনি এটি করতে পারেন

// app.js
app.engine('html', require('jade').renderFile);
app.set('view engine', 'html');

তারপরে আপনি কেবল জেড থেকে এইচটিএমএলে ভিউগুলিতে ফাইল পরিবর্তন করবেন।


আপনার কি এইচটিএমএল মার্কআপের আগে 'ডট' বা পিরিয়ড রাখতে হবে না?
গাস ক্রফোর্ড


-10

আপনি যদি জেড ব্যবহার না করেই নোডজেএসে প্লেইন এইচটিএমএল ব্যবহার করতে চান .. বা যা কিছু:

var html = '<div>'
    + 'hello'
  + '</div>';

ব্যক্তিগতভাবে আমি এটি দিয়ে ভাল করছি doing

নিয়ন্ত্রণ যখন নিয়ন্ত্রণ সুবিধা। আপনি কয়েকটি কৌশল ব্যবহার করতে পারেন, যেমন '<p>' + (name || '') + '</p>', টের্নারি .. ইত্যাদি

আপনি যদি ব্রাউজারে ইনডেন্ট কোড চান তবে আপনি এটি করতে পারেন:

+ 'ok \
  my friend \
  sldkfjlsdkjf';

এবং ইচ্ছায় \ t বা at n ব্যবহার করুন। তবে আমি ছাড়া পছন্দ করি, এটি আরও দ্রুত।


আমি এক্সপ্রেসে HTML ফাইলগুলি ব্যবহার করতে সক্ষম হতে চাই (বনাম প্লেইন নোড.জেএস)
গুপ্ত

ওহোহহ দুঃখিত (আমি ফরাসি: পি), যাতে আপনি fsমডিউলটি ব্যবহার করতে পারেন । fs.readFile(htmlfile, 'utf8', function (err, file) {
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.