Sto cercando di scoprire come caricare e eseguire il rendering di un file HTML di base, quindi non devo scrivere codice come:
response.write('...<p>blahblahblah</p>...');
Sto cercando di scoprire come caricare e eseguire il rendering di un file HTML di base, quindi non devo scrivere codice come:
response.write('...<p>blahblahblah</p>...');
Risposte:
Ho appena trovato un modo usando la libreria fs . Non sono sicuro però se sia il più pulito.
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);
});
Il concetto di base è solo la lettura di file non elaborati e il relativo dumping. Ancora aperto a opzioni più pulite, però!
sys = require('util')non è necessario poiché non viene stampato nulla sulla console.
fs.readFilepotrebbe essere inserita all'interno della chiamata a http.createServer, consentendo di gestire l'errore. Usa la risposta di Stephen con if (err) { console.log('something bad'); return res.end('Oops! Something bad happened.');}L' returnaffermazione è la cosa semplice che i nuovi utenti potrebbero trascurare.
usa app.get per ottenere il file html. è semplice!!
const express = require('express');
const app = new express();
app.get('/', function(request, response){
response.sendFile('absolutePathToYour/htmlPage.html');
});
E 'così semplice. Per questo utilizzare il modulo express. Installa express:npm install express -g
express.
var express = require('express'); var app = express();
npm install express --saveposto di -g
Puoi fare l'eco manuale dei file usando l'oggetto fs, ma ti consiglio di usare il framework ExpressJS per semplificarti la vita.
... Ma se insisti a farlo nel modo più duro:
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);
So che questa è una vecchia domanda, ma dato che nessuno l'ha menzionato, ho pensato che valesse la pena aggiungere:
Se vuoi letteralmente servire contenuto statico (ad esempio una pagina "about", un'immagine, css, ecc.) Puoi usare uno dei moduli che servono contenuto statico, ad esempio nodo-statico. (Ce ne sono altri che potrebbero essere migliori / peggiori: prova a search.npmjs.org.) Con un po 'di pre-elaborazione puoi quindi filtrare le pagine dinamiche da statiche e inviarle al giusto gestore di richieste.
Questo sarebbe probabilmente qualcosa di meglio dato che eseguirai lo streaming dei file piuttosto che caricarli tutti in memoria come 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);
Questo è un aggiornamento alla risposta di Muhammed Neswine
In Express 4.x, sendfile è stato deprecato e deve essere utilizzata la funzione sendFile . La differenza è che sendfile prende il percorso relativo e sendFile prende il percorso assoluto. Quindi, __dirname viene utilizzato per evitare l'hardcoding del percorso.
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'));
});
È un modo più flessibile e semplice di usare il pipemetodo.
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...');
Il modo migliore che ho imparato è usare express con file html poiché express offre molti vantaggi. Inoltre, puoi estenderlo a una piattaforma Heroku, se vuoi ... Basta dire :)
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");
Pulito e migliore .. !!!
Il modo più semplice per farlo è mettere tutti i tuoi file tra cui index.html o qualcosa con tutte le risorse come CSS, JS ecc. In una cartella pubblica o puoi nominarlo come vuoi e ora puoi usare express js e dire semplicemente all'app per usare il _dirname come:
Nel tuo server.js usando express aggiungi questi
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/public'));
e se vuoi avere una directory separata aggiungi una nuova directory nella directory pubblica e usa quel percorso "/ public / YourDirName"
Quindi cosa stiamo facendo esattamente qui? stiamo creando un'istanza espressa chiamata app e stiamo fornendo l'indirizzo se la directory pubblica accede a tutte le risorse. Spero che questo ti aiuti !
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 ");
response.writeHeader(), ma piuttosto response.writeHead().
response.writeHeader()ed response.writeHead()entrambi sono validi.
Penso che questa sarebbe un'opzione migliore in quanto mostra l'URL che esegue il server:
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}/`);
})
});
È davvero molto semplice se usi pipe. Di seguito è riportato lo snippet di codice server.js.
var http = require('http');
var fs = require('fs');
function onRequest(req, res){
console.log("USER MADE A REQUEST. " +req.url);
res.writeHead(200, {'Content-Type': 'text/html'});
var readStream = fs.createReadStream(__dirname + '/index.html','utf8');
/*include your html file and directory name instead of <<__dirname + '/index.html'>>*/
readStream.pipe(res);
}
http.createServer(onRequest).listen(7000);
console.log('Web Server is running...');
../. Se non dovessi fare altro che passare __dirname + "/index.html'a qualcosa del genere __dirname + requestedPageFromHeader, credo che il codice risultante avrebbe questa vulnerabilità. I caratteri del percorso di directory come ~andranno bene finché includi il __dirname +- se l'utente può determinare l'inizio del percorso dovrà verificare anche questi.
So che questa è una vecchia domanda: ecco una semplice utility per file server se preferisci non usare connect o express; ma piuttosto il modulo 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')
}
})
}
usa ejs invece di giada
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' });};
Questa è una domanda piuttosto vecchia ... ma se il tuo caso d'uso è semplicemente quello di inviare una determinata pagina HTML al browser su una base ad hoc, userei qualcosa di semplice come questo:
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);
possiamo caricare il documento html con il lavoro del frame connect. Ho inserito il mio documento html e le immagini correlate nella cartella pubblica del mio progetto in cui sono presenti i seguenti moduli codice e nodo.
//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);
Ho provato il metodo readFile () di fs, ma non riesce a caricare le immagini, ecco perché ho usato il framework di connessione.
https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906
Ecco i miei semplici codici demo per i file HTML statici host utilizzando Express Server!
spero che ti aiuti!
// 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}!
`);
});