এক্সপ্রেসে ভিউ ইঞ্জিন হিসাবে আমি কীভাবে এইচটিএমএল ব্যবহার করব?


130

আমি বীজ থেকে এই সাধারণ পরিবর্তনের চেষ্টা করেছি এবং সংশ্লিষ্ট .html ফাইলগুলি তৈরি করেছি (যেমন সূচক। Html)।

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

এবং এই ফাইলটি একই ছিল:

exports.index = function(req, res){
  res.render('index');
};

তবে দৌড়ানোর সময় আমি পাই

500 ত্রুটি: মডিউল 'এইচটিএমএল' খুঁজে পাওয়া যায় না

আমার 'ইজেস' ব্যবহারের একমাত্র বিকল্প? আমার অভিপ্রায়টি ছিল অ্যাংুলার জেএসের সাথে সংক্ষেপে সরল এইচটিএমএল ব্যবহার করা।


7
উত্তরের জন্য এই বিষয়ে দেখুন: stackoverflow.com/questions/4529586/... হোপ এই, সাহায্য করে
রোল্যান্ড

3
app.engine ('html', প্রয়োজন ('ejs')। রেন্ডারফাইল);
দিনেশ কণিভু

উত্তর:


91

অন্য লিঙ্কের উত্তরগুলি কাজ করবে, তবে এইচটিএমএল সরবরাহ করার জন্য, ভিউ ইঞ্জিনটি ব্যবহার করার দরকার নেই, যদি না আপনি ফঙ্কি রাউটিং সেট আপ করতে চান। পরিবর্তে, কেবল স্থির মিডলওয়্যারটি ব্যবহার করুন:

app.use(express.static(__dirname + '/public'));

3
আমি এগিয়ে গিয়ে app.set ('ইঞ্জিন দেখুন', এইচটিএমএল) এর উল্লেখ উল্লেখ করেছিলাম। আমি তখন একটি ত্রুটি বার্তা পেয়েছি যে "কোনও ডিফল্ট ইঞ্জিন নির্দিষ্ট করা হয়নি এবং কোনও এক্সটেনশন সরবরাহ করা হয়নি", যা প্রত্যাশিত। কিন্তু যখন আমি res.reender ("সূচক") পরিবর্তন করে res.reender ("index.html") এ পরিণত হয়েছিলাম, তখন আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: TypeError: বস্তুর সম্পত্তি 'ইঞ্জিন' # ভিউ> কোনও ফাংশন নয়।
জুলিও

4
এর চেয়ে বেশি ভিউ ইঞ্জিন নেই, তাই আমি আর মনে করি না res.render()work পরিবর্তে, আপনার কাঁচা এইচটিএমএল ফাইলগুলি রাখুন publicএবং স্থিতিশীল মিডলওয়্যারগুলি সরাসরি ফাইলগুলি পরিবেশন করার জন্য ডিল করুন। এর চেয়ে আপনার যদি ফ্যানসিয়ার রুটগুলির প্রয়োজন হয় তবে আপনি সম্ভবত নিজের এইচটিএমএল ভিউ ইঞ্জিন সেট আপ করতে পারেন।
নিক ম্যাককুরডি

6
তাহলে আপনি অ্যাপ.জেট () কলটিতে কী লিখবেন?
আজব্রাস

5
@ আজব্রাস আপনি এমনকি একটি app.get () কল প্রয়োজন নেই। এটি কেবল আপনার / পাবলিক ফোল্ডারে সরাসরি যে কোনও HTML ফাইল সরবরাহ করবে। সুতরাং ব্রাউজারে, আপনি কেবল এইচটিএমএলকে সরাসরি নির্দেশ করেছেন এবং এটিই ... মূলত কোনও রাউটিং নেই
dm76

সমস্যাটির সাথে আমি যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল আপনি যদি পৃষ্ঠাটি লোড হওয়ার পরে তা রিফ্রেশ করেন তবে এটি ত্রুটি বলে ত্রুটি দেয়: কোনও ডিফল্ট ইঞ্জিন নির্দিষ্ট করা হয়নি এবং কোনও এক্সটেনশান সরবরাহ করা হয়নি। তারপরে আপনি যদি প্রমাণ ব্যবহার করেন তবে {সরবরাহ করুন: অবস্থানের স্ট্র্যাজি, ইউজ ক্লাস: হ্যাশলোকেশনস্ট্রেজি}], এটি আপনার ইউআরএলে একটি হ্যাশ বিজ্ঞাপন দেয় যা অন্যান্য কারণে ব্যথা। এই সমস্যা এড়ানোর একটি উপায় আছে কি?
wuno

33

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

  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 হিসাবে যুক্ত করুন। আপনার নোড সার্ভার পুনরায় চালু করুন এবং ব্রাউজারে অ্যাপ্লিকেশন শুরু করুন।

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


কোনও পদক্ষেপের 'ইঞ্জিন' নেই - সমস্ত পদক্ষেপের পরে
ইমরাননাকভি

আপনি এক্সপ্রেসের কোন সংস্করণ ব্যবহার করছেন? এক্সপ্রেস 4.x এ অ্যাপ্লিকেশন.ইনজিন এপিআই রয়েছে। আরো তথ্য @ হয় expressjs.com/en/api.html#app.engine
AnandShanbhag

দুর্দান্ত কাজ করেছেন! আমি যখন এক বছরের পুরানো উত্তর প্রথমবার কাজ করে আমি পছন্দ করি।
ম্যাথু Snell

কেন এটি এখনও আমার সিএসএস এবং অন্যান্য রেন্ডার করতে পারে না
উদাহরণস্বরূপ

23

আপনার apps.js এ কেবল যুক্ত করুন

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');

আপনার ভিউ ফাইলগুলিকে .html হিসাবে রাখার সময় আপনি ejs ভিউ ইঞ্জিন ব্যবহার করতে পারেন

উত্স: http://www.makebetterthings.com/node-js/how-to-use-html-with-express-node-js/

আপনাকে এই দুটি প্যাকেজ ইনস্টল করতে হবে:

`npm install ejs --save`
`npm install path --save`

এবং তারপরে প্রয়োজনীয় প্যাকেজগুলি আমদানি করুন:

`var path = require('path');`


এই ভাবে আপনি যেমন আপনার মতামত সংরক্ষণ করতে পারবেন .html পরিবর্তে .ejs
এইচটিএমএল সমর্থন করে তবে এজেগুলি স্বীকৃতি দেয় না এমন আইডিইগুলির সাথে কাজ করার সময় বেশ সহায়ক।


1
app.set ('দর্শন', path.join (__ dirname, '/ পাথ / থেকে / আপনার / ফোল্ডার')); app.set ("দেখুন বিকল্পগুলি", {লেআউট: মিথ্যা}); অ্যাপ্লিকেশন। ;});});
নীলকণ্ঠ সিংহ দেব

16

আপনার সার্ভার কনফিগারেশনের জন্য এটি ব্যবহার করে দেখুন

app.configure(function() {
    app.use(express.static(__dirname + '/public'));         // set the static files location
    app.use(express.logger('dev'));                         // log every request to the console
    app.use(express.bodyParser());                          // pull information from html in POST
    app.use(express.methodOverride());                      // simulate DELETE and PUT
    app.use(express.favicon(__dirname + '/public/img/favicon.ico'));
});

তারপরে রুটে আপনার কলব্যাক ফাংশনগুলি দেখতে পাবেন:

function(req, res) {
    res.sendfile('./public/index.html');
};

14

আপনি যদি সাধারণ সরল এইচটিএমএল ফাইল সহ কৌণিক ব্যবহার করতে চান তবে কোনও ভিউ ইঞ্জিনের প্রয়োজন নেই। এটি কীভাবে করবেন তা এখানে রয়েছে: আপনার route.jsফাইলে:

router.get('/', (req, res) => {
   res.sendFile('index.html', {
     root: 'yourPathToIndexDirectory'
   });
});

1
একেবারে সহজ সমাধান। আমার কোনও ভিউ ইঞ্জিন ইনস্টল / কনফিগার করা নেই এবং এইচটিএমএল প্রেরণ করা হয়েছে।
নিউক্লিক

7

আমি https://www.npmjs.com/package/express-es6-template-engine - অত্যন্ত লাইটওয়েভ এবং blzingly দ্রুত টেম্পলেট ইঞ্জিন ব্যবহার করার পরামর্শ দিচ্ছি । নামটি কিছুটা বিভ্রান্তিকর কারণ এটি এক্সপ্রেসগুলি ছাড়াও কাজ করতে পারে।

express-es6-template-engineআপনার অ্যাপ্লিকেশনটিতে সংহত করার জন্য প্রয়োজনীয় বুনিয়াদিগুলি প্রয়োগ করাতে বেশ সহজ এবং বেশ সোজা এগিয়ে রয়েছে:

const express = require('express'),
  es6Renderer = require('express-es6-template-engine'),
  app = express();
  
app.engine('html', es6Renderer);
app.set('views', 'views');
app.set('view engine', 'html');
 
app.get('/', function(req, res) {
  res.render('index', {locals: {title: 'Welcome!'}});
});
 
app.listen(3000);
index.htmlআপনার 'ভিউ' ডিরেক্টরিতে ফাইলটির লিখিত সামগ্রীটি এখানে রয়েছে :

<!DOCTYPE html>
<html>
<body>
    <h1>${title}</h1>
</body>
</html>

4

উত্তর খুব সহজ। * .Html পৃষ্ঠাগুলি রেন্ডার করতে আপনার অবশ্যই অ্যাপ্লিকেশন ('এইচটিএমএল') ব্যবহার করতে হবে। এটি ব্যবহার করে দেখুন। সমস্যাটি সমাধান করতে হবে।

app.set('views', path.join(__dirname, 'views'));
**// Set EJS View Engine**
app.set('view engine','ejs');
**// Set HTML engine**
app.engine('html', require('ejs').renderFile);

.html ফাইলটি কাজ করবে


2
অসম্পূর্ণ উত্তর। এই পরিবর্তনগুলি কোথায় করা হয়? App.js ধরে নিচ্ছেন তবে আপনার উত্তরটি নির্দিষ্ট হওয়া দরকার। এছাড়াও, সম্ভবত এটিগুলির পরিবর্তনের দরকার নেই কারণ এই তিনটি পরিবর্তন / সংযোজনের ফলাফল "মডিউল 'ইজেস' খুঁজে পাচ্ছে না"। আপনার উত্তর সম্ভবত কাছাকাছি তবে আপনার ইমোতে আরও কিছুটা যুক্ত করতে হবে।
নিউক্লিক

এছাড়াও, রেন্ডারিং কোনও ফাইল পরিবেশন করার মতো নয়। রেন্ডারিংয়ের জন্য সার্ভারের কোনও ফাইল প্রাক-প্রক্রিয়াজাতকরণ এবং রেন্ডার পদ্ধতিতে যে কোনও গতিশীল সামগ্রী অন্তর্ভুক্ত করা দরকার requires সম্ভবত ওপি এটিই চেয়েছিল তবে কিছু লোক পরিবেশনায় রীতিমতো দ্বন্দ্ব করে। খুব ভিন্ন ধারণা।
নিউক্লিক

@ এজেএসএল ফাইলের চেয়ে এইচটিএমএল ফাইল রেন্ডারিংয়ের জন্য @ ওয়েড করুন।
দিনেশ কণিভু

3

এইচটিএমএল ফাইলগুলি এজেএস ইঞ্জিন ব্যবহার করে রেন্ডার করা যেতে পারে:

app.set('view engine', 'ejs');

এবং নিশ্চিত করুন যে "/ejs" এর সাথে "/ ভিউজ" এর অধীনে আপনার ফাইলগুলির নাম দেওয়া হয়েছে।

উদাহরণস্বরূপ "index.ejs"।


এটি কাজ করে তবে কিছুটা হ্যাকিং লাগে। আপনি কি জানেন যে .html এর জায়গায় .ejs ব্যবহার করা থেকে কোনও গুপ্তচর রয়েছে? সম্ভবত দ্রুততম ফিক্সের চিয়ার্সগুলি একই পরামর্শ দিয়েছে!
মাইক্রিম

3

এইচটিএমএল এর জন্য মিডলওয়্যারটি মন্তব্য করুন

//app.set('view engine', 'html');

পরিবর্তে ব্যবহার করুন:

app.get("/",(req,res)=>{
    res.sendFile("index.html");
});

2

এইচটিএমএল কোনও ভিউ ইঞ্জিন নয়, তবে ইজেএস এর মধ্যে এইচটিএমএল কোড লেখার সম্ভাবনা দেয়


1

রাউটিংয়ের মাধ্যমে সার্ভার এইচটিএমএল পৃষ্ঠাগুলিতে, আমি এটি করেছি।

var hbs = require('express-hbs');
app.engine('hbs', hbs.express4({
  partialsDir: __dirname + '/views/partials'
}));
app.set('views', __dirname + '/views');
app.set('view engine', 'hbs');

এবং আমার .html ফাইলগুলিকে .hbs ফাইলগুলিতে নতুন নামকরণ করা হয়েছে - হ্যান্ডেলবারগুলি সরল এইচটিএমএল সমর্থন করে


1

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

Install consolidate and swig to your directory.

 npm install consolidate
 npm install swig

add following lines to your app.js file

var cons = require('consolidate');

// view engine setup
app.engine('html', cons.swig)
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');

add your view templates as .html inside views folder. Restart you node server and start the app in the browser.

এই কাজ করা উচিত



1

Ejs টেমপ্লেট ইনস্টল করুন

npm install ejs --save

App.js এ ejs দেখুন

app.set('views', path.join(__dirname, 'views'));`
app.set('view engine', 'ejs');

ভিউ / ইন্ডেস.জেস এবং রাউটারে এজেএস টেম্পলেট ব্যবহারের মতো দর্শনগুলিতে একটি এজেএস টেম্পলেট তৈরি করুন

router.get('/', function(req, res, next) {
    res.render('index', { title: 'Express' });
});

0

সুইগের সাহায্যে এইচটিএমএল টেমপ্লেট রেন্ডার করুন।

//require module swig    
    var swig = require('swig');

// view engine setup    
    app.set('views', path.join(__dirname, 'views'));
    app.engine('html', swig.renderFile);
    app.set('view engine', 'html');

0

এইচটিএমএল ফাইলগুলি রেন্ডার করার দরকার নেই।
রেন্ডার ইঞ্জিন কী করে তা হ'ল এইচটিএমএল ফাইল নয় এমন একটি ফাইলকে এইচটিএমএল ফাইলে পরিণত করে।
এইচটিএমএল ফাইল প্রেরণ করতে, কেবলমাত্র:

res.sendFile("index.html");

আপনার ব্যবহারের প্রয়োজন হতে পারে __dirname+"/index.html"তাই এক্সপ্রেসটি সঠিক পথটি জানতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.