2013-07-28 6 views
85

मैंने बीज से इस सरल परिवर्तन की कोशिश की और संबंधित .html फ़ाइलों (उदा। Index.html) बनाया।मैं HTML में व्यू इंजन के रूप में HTML का उपयोग कैसे करूं?

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

और इस फाइल को बना रहा ही:

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

लेकिन जबकि चल रहा है मैं

500 त्रुटि: मॉड्यूल 'एचटीएमएल'

नहीं खोजा जा सका अपने ही उपयोग करने का विकल्प है ' EJS '? मेरा इरादा AngularJS के साथ संयोजन में सादे HTML का उपयोग करना था।

+7

के लिए काम किया एक जवाब के लिए इस विषय देखें: http: // stackoverflow। कॉम/प्रश्न/4529586/रेंडर-बेसिक-एचटीएमएल-व्यू-इन-नोड-जेएस-एक्सप्रेस उम्मीद है कि इससे मदद मिलती है, – roland

+0

app.engine ('html', आवश्यकता है ('ejs')। RenderFile); –

उत्तर

60

अन्य लिंक पर उत्तर काम करेंगे, लेकिन एचटीएमएल की सेवा करने के लिए, जब तक आप फंकी रूटिंग सेट अप नहीं करना चाहते हैं, तब तक एक दृश्य इंजन का उपयोग करने की आवश्यकता नहीं है। इसके बजाय, सिर्फ स्थिर मिडलवेयर का उपयोग करें:

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

मैं आगे बढ़ गया और app.set ('इंजन देखें', एचटीएमएल) के संदर्भ पर टिप्पणी की। तब मुझे एक त्रुटि संदेश मिला कि "कोई डिफ़ॉल्ट इंजन निर्दिष्ट नहीं किया गया था और कोई एक्सटेंशन प्रदान नहीं किया गया था", जिसकी अपेक्षा की जाती है। लेकिन जब मैंने Res.render ("index.html) को res.render (" index.html ") में बदल दिया, तो मुझे निम्न त्रुटि मिली: TypeError: ऑब्जेक्ट का गुण 'इंजन' # कोई फ़ंक्शन नहीं है। – Julio

+3

कोई और इंजन नहीं है, इसलिए मुझे नहीं लगता कि 'res.render()' अब और काम करेगा। इसके बजाय, अपनी कच्ची HTML फ़ाइलों को 'सार्वजनिक' में रखें और स्थिर मिडलवेयर को फ़ाइलों को सीधे सेवा देने के साथ सौदा करें। यदि आपको इससे अधिक प्रशंसक मार्गों की आवश्यकता है, तो आप शायद अपना स्वयं का HTML व्यू इंजन सेट कर सकते हैं। –

+4

तो आप app.get() कॉल में क्या लिखते हैं? – ajbraus

12

अपने सर्वर config के लिए यह कोशिश

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

तो मार्गों के लिए अपने कॉलबैक कार्यों की तरह दिखाई देगा रूटिंग, मैंने यह किया है।

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 के लिए - हैंडल सादे HTML का समर्थन

0

के माध्यम से सर्वर एचटीएमएल पृष्ठों के लिए:

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

बनाने के इंजन जेड आप निम्न चरणों का पालन कर सकते के बजाय एचटीएमएल स्वीकार प्रस्तुत करना;

  1. अपने निर्देशिका करने के लिए स्थापित consolidate और swig। अपने app.js को

    npm install consolidate 
    npm install swig 
    
  2. ऐड निम्नलिखित लाइनों

    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 अंदर "दृश्य" फ़ोल्डर के रूप में आपके विचार टेम्पलेट्स जोड़ने फ़ाइल। आपको नोड सर्वर को पुनरारंभ करें और ब्राउज़र में ऐप शुरू करें।

हालांकि यह बिना किसी मुद्दे के एचटीएमएल प्रस्तुत करेगा, मैं आपको सीखकर जेएडीई का उपयोग करने की सलाह दूंगा। जेड एक अद्भुत टेम्पलेट इंजन है और सीखने से आपको बेहतर डिजाइन & स्केलेबिलिटी प्राप्त करने में मदद मिलेगी।

+0

ग्रेट, यह मेरे लिए काम करता है, धन्यवाद –

+0

में कोई तरीका 'इंजन' नहीं है - सभी चरणों के बाद – ImranNaqvi

+0

एक्सप्रेस का कौन सा संस्करण आप उपयोग कर रहे हैं? एक्सप्रेस 4.x में app.engine API शामिल है। अधिक जानकारी @ http://expressjs.com/en/api.html#app.engine – AnandShanbhag

3

HTML फ़ाइलों EJS इंजन का उपयोग कर गाया जा सकता है:

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

और के तहत अपनी फ़ाइलें सुनिश्चित करें कि "/ विचारों" ".ejs" के नाम कर रहे हैं।

उदाहरण के लिए "index.ejs"।

+0

यह काम करता है लेकिन थोड़ा हैकी लगता है। क्या आप जानते हैं कि .html के स्थान पर .ejs का उपयोग करने से कोई चेतावनी है या नहीं? शायद सबसे तेज़ फिक्स के लिए चीयर्स ने वही सुझाव दिया! – mikeym

9

अपने ऐप्स में।js सिर्फ जोड़ने जबकि .html

स्रोत के रूप में आपके विचार फ़ाइलें रखने

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

अब आप EJS दृश्य इंजन का उपयोग कर सकते हैं:

`npm install ejs --save` 
`npm install path --save` 
: http://www.makebetterthings.com/node-js/how-to-use-html-with-express-node-js/

आप इस दो संकुल स्थापित करने की आवश्यकता

और फिर आयात की जरूरत संकुल:

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


इस प्रकार आप के रूप में अपने विचारों को सहेज सकते हैं। के बजाय .ejs
सुंदर सहायक IDEs कि एचटीएमएल का समर्थन लेकिन न EJS पहचान के साथ काम करते हुए। आप सरल सादे html फ़ाइल के साथ कोणीय उपयोग करना चाहते हैं

+1

app.set ('विचार', path.join (__ dirname, '/ path/to/your/folder')); app.set ("दृश्य विकल्प", {लेआउट: झूठी}); app.engine ('html', फ़ंक्शन (पथ, ऑप्ट, एफएन) { fs.readFile (पथ, 'utf-8', फ़ंक्शन (त्रुटि, str) { अगर (त्रुटि) वापसी स्ट्र; वापसी fn (शून्य, str); }); }); –

4

कोई दृश्य नहीं इंजन, आवश्यक है। अपने route.js फ़ाइल में: यहाँ यह कैसे करना

router.get('/', (req, res) => { 
    res.sendFile('index.html', { 
    root: 'yourPathToIndexDirectory' 
    }); 
}); 
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. 

यह काम करना चाहिए

3

जवाब बहुत सरल है। * .html पेजों को प्रस्तुत करने के लिए आपको app.engine ('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 फ़ाइल काम

0

इस सरल समाधान बाहर की कोशिश करेंगे, यह मेरे

app.get('/', function(req, res){ 
    res.render('index.ehtml') 
    }); 
संबंधित मुद्दे