2011-01-18 25 views
163

में मूल HTML लोड हो रहा है बस यहां एक साधारण नोड.जेएस नोब सवाल है। मैं यह जानने का प्रयास कर रहा हूं कि मूल HTML फ़ाइल को लोड और "प्रदर्शन" कैसे करें, इसलिए मुझे response.write('...<p>blahblahblah</p>...'); जैसे कोड लिखने की आवश्यकता नहीं है।Node.js

उत्तर

208

मुझे fs library का उपयोग करके मिला। मुझे यकीन नहीं है कि यह सबसे साफ है हालांकि।

var http = require('http'), 
    fs = require('fs'); 


fs.readFile('./index.html', function (err, html) { 
    if (err) { 
     throw err; 
    }  
    http.createServer(function(request, response) { 
     response.writeHeader(200, {"Content-Type": "text/html"}); 
     response.write(html); 
     response.end(); 
    }).listen(8000); 
}); 

मूल अवधारणा सिर्फ कच्चे फ़ाइल पढ़ने और सामग्री डंपिंग है। अभी भी क्लीनर विकल्पों के लिए खुला है, यद्यपि!

+13

आप अपने मामले में fs.readFileSync का उपयोग करना चाहिए, यह बुरा हो पृष्ठ के रूप में अपरिभाषित आने के लिए के लिए होगा।लेकिन हाँ, यह एक बुनियादी HTML सर्वर बनाने के लिए एक अच्छा तरीका है – generalhenry

+0

अगला आप सरल टेम्पलेट कैशिंग जोड़ सकते हैं, जैसे: कैश ['अनुक्रमणिका'] = डेटा; // दिया गया विभिन्न कैश = {}; –

+1

'sys = आवश्यकता ('उपयोग') की आवश्यकता नहीं है क्योंकि कंसोल पर कुछ भी मुद्रित नहीं किया गया है। – Bakudan

32

आप fs ऑब्जेक्ट का उपयोग करके मैन्युअल रूप से फ़ाइलों को प्रतिबिंबित कर सकते हैं, लेकिन मैं आपके जीवन को अधिक आसान बनाने के लिए ExpressJS ढांचे का उपयोग करने की अनुशंसा करता हूं।

... लेकिन आप इसे मुश्किल तरीके से कर रही पर जोर देते हैं, तो:

var http = require('http'); 
var fs = require('fs'); 

http.createServer(function(req, res){ 
    fs.readFile('test.html',function (err, data){ 
     res.writeHead(200, {'Content-Type': 'text/html','Content-Length':data.length}); 
     res.write(data); 
     res.end(); 
    }); 
}).listen(8000); 
+4

हाँ, यह वही बात है जो मैं कैमरे के साथ करता हूं। एक्सप्रेस सुझाव के लिए भी धन्यवाद। यह बहुत प्यारा है, और मुझे पूरा यकीन है कि मैं इसे अपने अगले प्रोजेक्ट के लिए उपयोग करूँगा। मेरा लक्ष्य यह समझना था कि यह ढांचे के नीचे कैसे किया गया है, इससे पहले कि मैंने ढांचे को भारी उठाने दिया है। –

+0

अच्छी रणनीति ... – Martian2049

+0

एंटी वायरस की फ़ायरवॉल इस चरण को –

20

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन कोई भी रूप में यह उल्लेख किया है मैंने सोचा कि यह जोड़ने के लायक था:

यदि आप सचमुच स्थिर सामग्री की सेवा करना चाहते हैं ('के बारे में' पृष्ठ, छवि, सीएसएस, आदि कहें) तो आप मॉड्यूल की सेवा करने वाली स्थिर सामग्री में से एक का उपयोग कर सकते हैं, उदाहरण के लिए नोड-स्टेटिक। (ऐसे कुछ भी हैं जो बेहतर/बदतर हो सकते हैं - search.npmjs.org आज़माएं।) थोड़ी सी प्री-प्रोसेसिंग के साथ आप गतिशील पृष्ठों को स्थैतिक से फ़िल्टर कर सकते हैं और उन्हें सही अनुरोध हैंडलर पर भेज सकते हैं।

+0

+1 नोड-स्टेटिक के लिए अक्षम कर सकती है। stati डालने का एक बहुत आसान तरीका है सी फाइलें – Nikwin

+0

उत्तर जेड फ़ाइल को सही ढंग से लोड नहीं करता है, नोड-स्टेटिक मेरी समस्या हल करता है। –

16

यह शायद कुछ बेहतर होगा क्योंकि आप इसे फाइलों को स्ट्रीमिंग कर रहे हैं बल्कि इसे fs.readFile जैसे स्मृति में लोड करने के बजाय।

var http = require('http'); 
var fs = require('fs'); 
var path = require('path'); 
var ext = /[\w\d_-]+\.[\w\d]+$/; 

http.createServer(function(req, res){ 
    if (req.url === '/') { 
     res.writeHead(200, {'Content-Type': 'text/html'}); 
     fs.createReadStream('index.html').pipe(res); 
    } else if (ext.test(req.url)) { 
     fs.exists(path.join(__dirname, req.url), function (exists) { 
      if (exists) { 
       res.writeHead(200, {'Content-Type': 'text/html'}); 
       fs.createReadStream('index.html').pipe(res); 
      } else { 
       res.writeHead(404, {'Content-Type': 'text/html'}); 
       fs.createReadStream('404.html').pipe(res); 
     }); 
    } else { 
     // add a RESTful service 
    } 
}).listen(8000); 
0

हम कनेक्ट फ्रेम फ्रेम के साथ एचटीएमएल दस्तावेज़ लोड कर सकते हैं। मैंने अपने एचटीएमएल दस्तावेज़ और संबंधित छवियों को मेरे प्रोजेक्ट के सार्वजनिक फ़ोल्डर में रखा है जहां नीचे कोड और नोड मॉड्यूल मौजूद हैं।

//server.js 
var http=require('http'); 
var connect=require('connect'); 

var app = connect() 
    .use(connect.logger('dev')) 
    .use(connect.static('public')) 
    .use(function(req, res){ 
    res.end('hello world\n'); 
}) 

http.createServer(app).listen(3000); 

मैं FS की विधि ReadFile() की कोशिश की है, लेकिन यह छवियों को लोड करने के लिए विफल रहता है, यही कारण है कि मैं कनेक्ट ढांचे का इस्तेमाल किया है है।

2

मुझे पता है कि यह एक पुराना सवाल है - यदि आप कनेक्ट या एक्सप्रेस का उपयोग नहीं करना चाहते हैं तो यहां एक साधारण फ़ाइल सर्वर उपयोगिता है; बल्कि http मॉड्यूल।

var fileServer = require('./fileServer'); 
var http = require('http'); 
http.createServer(function(req, res) { 
    var file = __dirname + req.url; 
    if(req.url === '/') { 
     // serve index.html on root 
     file = __dirname + 'index.html' 
    } 
    // serve all other files echoed by index.html e.g. style.css 
    // callback is optional 
    fileServer(file, req, res, callback); 

}) 
module.exports = function(file, req, res, callback) { 
    var fs = require('fs') 
     , ext = require('path').extname(file) 
     , type = '' 
     , fileExtensions = { 
      'html':'text/html', 
      'css':'text/css', 
      'js':'text/javascript', 
      'json':'application/json', 
      'png':'image/png', 
      'jpg':'image/jpg', 
      'wav':'audio/wav' 
     } 
    console.log('req '+req.url) 
    for(var i in fileExtensions) { 
     if(ext === i) {  
      type = fileExtensions[i] 
      break 
     } 
    } 
    fs.exists(file, function(exists) { 
     if(exists) { 
      res.writeHead(200, { 'Content-Type': type }) 
      fs.createReadStream(file).pipe(res) 
      console.log('served '+req.url) 
      if(callback !== undefined) callback() 
     } else { 
      console.log(file,'file dne') 
     } 
    }) 
} 
1

यह एक बहुत पुराना सवाल है ... लेकिन अगर आपके उपयोग के मामले यहाँ बस एक तदर्थ आधार पर ब्राउज़र के लिए एक विशेष HTML पृष्ठ भेजने के लिए है, मैं कुछ इस तरह सरल प्रयोग करेंगे:

var http = require('http') 
,  fs = require('fs'); 

var server = http.createServer(function(req, res){ 
    var stream = fs.createReadStream('test.html'); 
    stream.pipe(res); 
}); 
server.listen(7000); 
19

HTML फ़ाइल प्राप्त करने के लिए app.get का उपयोग करें। यह आसान है!!

app.get('/', function(request, response){ 
    response.sendfile('yourhtmlpagename.html'); 
}); 

जितना आसान होगा उतना आसान है। इस उपयोग के लिए एक्सप्रेस मॉड्यूल। स्थापित एक्सप्रेस: ​​npm install express -g

+20

आप यह उल्लेख करना भूल गए कि आपको 'एक्सप्रेस' होना है। – shriek

+4

एक्सप्रेस बहिष्कृत res.sendfile: res.sendFile का उपयोग करें http://stackoverflow.com/a/26079640/3166417 – itzhar

+1

अच्छे उत्तर। उन लोगों के लिए जो app.get से पहले एक्सप्रेस प्रकार का उपयोग करने के बारे में अनजान हैं ....: var express = requ ('express'); var app = express(); ' –

9

यह Muhammed Neswine's answer

एक्सप्रेस 4.x में के लिए एक अद्यतन है, Sendfile पदावनत किया गया है और Sendfile फ़ंक्शन का उपयोग किया जाना है। अंतर है sendfile सापेक्ष पथ लेता है और भेजता है फ़ाइल पूर्ण पथ लेता है।इसलिए, पथ को हार्डकोडिंग से बचने के लिए __dirname का उपयोग किया जाता है।

var express = require('express'); 
var app = express(); 
var path = require("path"); 

app.get('/', function (req, res) { 
    res.sendFile(path.join(__dirname + '/folder_name/filename.html')); 
}); 
1

उपयोग EJS बजाय जेड

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

बेस्ट तरीका मैंने सीखा है कि एचटीएमएल फाइलों के साथ एक्सप्रेस का उपयोग कर एक्सप्रेस के रूप में बहुत लाभ मिलता है। यदि आप चाहें तो भी इसे एक हेरोकू मंच पर बढ़ा सकते हैं .. बस कह रहे हैं :)

var express = require("express"); 
var app  = express(); 
var path = require("path"); 


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

app.listen(3000); 



console.log("Running at Port 3000"); 

स्वच्छ और सर्वोत्तम .. !!!

6

ऐसा करने का आसान तरीका है, इंडेक्स.html या सीएसएस, जेएस इत्यादि जैसे सभी संसाधनों के साथ कुछ अन्य फाइलों को सार्वजनिक रूप से या आप इसे जो भी चाहें उसका नाम दे सकते हैं और अब आप एक्सप्रेस जेएस का उपयोग कर सकते हैं और बस के रूप में _dirname उपयोग करने देता है बता:

अपने server.js में एक्सप्रेस का उपयोग कर इन

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

जोड़ सकते हैं और seprate निर्देशिका सार्वजनिक निर्देशिका के अंतर्गत नई निर्देशिका जोड़ सकते हैं और है कि पथ का उपयोग करता है, तो आप करना चाहते हैं "/ सार्वजनिक/YourDirName "

तो हम क्या ar ar ई यहाँ बिल्कुल कर रहे हैं? हम ऐप नामक एक्सप्रेस इंस्टेंस बना रहे हैं और यदि सार्वजनिक निर्देशिका सभी संसाधनों तक पहुंचने के लिए हम एड्रेस दे रहे हैं। उम्मीद है कि यह मदद करता है!

5

एक्सप्रेस मॉड्यूल का उपयोग करने के बारे में कैसे?

var app = require('express')(); 

    app.get('/',function(request,response){ 
     response.sendFile(__dirname+'/XXX.html'); 
    }); 

    app.listen('8000'); 

फिर, आप प्राप्त करने के लिए ब्राउज़र का उपयोग कर सकते हैं/स्थानीय होस्ट: 8000

4

मुझे लगता है कि यह एक बेहतर विकल्प हो सकता है के रूप में यह सर्वर चल यूआरएल पता चलता है:

var http = require('http'), 
    fs = require('fs'); 

const hostname = '<your_machine_IP>'; 
const port = 3000; 

const html=fs.readFile('./index.html', function (err, html) { 
    if (err) { 
     throw err; 
    } 
     http.createServer(function(request, response) { 
     response.writeHeader(200, {"Content-Type": "text/html"}); 
     response.write(html); 
     response.end(); 
    }).listen(port, hostname,() => { 
      console.log(`Server running at http://${hostname}:${port}/`); 
     }) 
}); 
0

https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906

एक्सप्रेस सर्वर का उपयोग करके मेजबान स्थिर HTML फ़ाइलों के लिए मेरे सरल डेमो कोड यहां दिए गए हैं!

उम्मीद है कि यह आपके लिए मदद करता है!

// simple express server for HTML pages! 
 
// ES6 style 
 

 
const express = require('express'); 
 
const fs = require('fs'); 
 
const hostname = '127.0.0.1'; 
 
const port = 3000; 
 
const app = express(); 
 

 
let cache = [];// Array is OK! 
 
cache[0] = fs.readFileSync(__dirname + '/index.html'); 
 
cache[1] = fs.readFileSync(__dirname + '/views/testview.html'); 
 

 
app.get('/', (req, res) => { 
 
    res.setHeader('Content-Type', 'text/html'); 
 
    res.send(cache[0]); 
 
}); 
 

 
app.get('/test', (req, res) => { 
 
    res.setHeader('Content-Type', 'text/html'); 
 
    res.send(cache[1]); 
 
}); 
 

 
app.listen(port,() => { 
 
    console.log(` 
 
     Server is running at http://${hostname}:${port}/ 
 
     Server hostname ${hostname} is listening on port ${port}! 
 
    `); 
 
});

+0

http://expressjs.com/en/starter/basic-routing.html – xgqfrms

5

यह अधिक pipe विधि का उपयोग करने के लिए लचीला और सरल तरीका है।

var fs = require('fs'); 
var http = require('http'); 

http.createServer(function(request, response) { 
    response.writeHead(200, {'Content-Type': 'text/html'}); 

    var file = fs.createReadStream('index.html'); 
    file.pipe(response); 

}).listen(8080); 

console.log('listening on port 8080...'); 
1
var http = require('http'); 
    var fs = require('fs'); 

    http.createServer(function(request, response) { 
    response.writeHeader(200, {"Content-Type": "text/html"}); 
    var readSream = fs.createReadStream('index.html','utf8') 
    readSream.pipe(response); 
    }).listen(3000); 

console.log("server is running on port number ");