在Node.js中加载基本的HTML

这里只是一个简单的Node.js noob问题。 我试图找出如何加载和“显示”一个基本的HTML文件,所以我不必编写像response.write('...<p>blahblahblah</p>...');

我只是find了一个使用fs库的方法 。 我不确定它是否是最干净的。

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

基本概念就是原始文件的读取和转储的内容。 尽pipe如此,仍然打开清洁选项!

您可以使用fs对象手动回显文件,但是我build议使用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); 

我知道这是一个古老的问题,但没有人提到过,我认为值得补充:

如果你真的想要提供静态内容(比如'about'页面,图像,css等),你可以使用静态内容服务模块之一,例如node-static。 (还有其他的可能会更好/更糟糕 – 请尝试search.npmjs.org。)通过一些预处理,您可以从静态过滤dynamic页面并将它们发送到正确的请求处理程序。

使用app.get来获取html文件。 这很简单!!

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

就这么简单。 为此使用快递模块。 安装express: npm install express -g

这可能是一些更好的,因为你将stream式传输文件,而不是像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); 

这是对Muhammed Neswine的答案的更新

在Express 4.x中,sendfile已被弃用,并且必须使用sendFile函数。 不同之处在于sendfile取相对path,sendFile取绝对path。 所以,__dirname用来避免硬编码path。

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

我学到的最好的方法是使用快递与HTML文件作为明确表示有很多优势。 你也可以扩展到Heroku平台,如果你想..只是说:)

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

干净,最好..

简单的做法是,把所有的文件,包括index.html或者所有的资源,如CSS,JS等在一个文件夹公开,或者你可以任意命名它,现在你可以使用快递js,只是告诉应用程序使用_dirname作为:

在你的server.js中使用express添加这些

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

如果你想在seprate目录下添加新的目录在公共目录下并使用该path“/ public / YourDirName”

那么我们到底在做什么? 我们正在创build一个名为app的快速实例,如果公共目录访问所有资源,我们将给出地址。 希望这可以帮助 !

如何使用快速模块?

  var app = require('express')(); app.get('/',function(request,response){ response.sendFile(__dirname+'/XXX.html'); }); app.listen('8000'); 

那么,你可以使用浏览器来获取/ localhost:8000

使用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...'); 

我认为这将是一个更好的select,因为它显示了运行服务器的URL:

 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}/`); }) }); 

我知道这是一个老问题 – 如果你不想使用connect或express,这里是一个简单的文件服务器工具; 而是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 eg 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') } }) } 

这是一个相当古老的问题,但是如果你的用例是简单地发送一个特定的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); 

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

我们可以加载连接框架工作的HTML文件。 我已经将我的html文档和相关的图像放在我的项目的公共文件夹中,下面的代码和节点模块出现。

 //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()方法,但它无法加载图像,这就是为什么我使用连接框架。

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

这里是我使用Express服务器的主机静态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}! `); });