17 ответов:
Я только что нашел один способ использования библиотека ФС. Я не уверен, что это самый чистый, хотя.
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); });основная концепция - это просто чтение необработанного файла и сброс содержимого. Тем не менее, все еще открыты для более чистых вариантов!
вы можете Эхо-файлы вручную с помощью объекта fs, но я бы рекомендовал использовать ExpressJS Framework, чтобы сделать вашу жизнь намного проще.
...Но если вы настаиваете на том, чтобы сделать это трудный путь:
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);
использовать приложение.получить HTML-файл. это просто!!
const express = require('express'); const app = new express(); app.get('/', function(request, response){ response.sendfile('yourhtmlpagename.html'); });это так просто. Для этого используйте экспресс модуль. Установите экспресс:
npm install express -g
Я знаю, это старый вопрос, но поскольку никто не упомянул об этом, я подумал, что стоит добавить:
Если вы буквально хотите обслуживать статический контент (скажем, страницу "о", изображение, css и т. д.), Вы можете использовать один из модулей обслуживания статического контента, например node-static. (Есть и другие, которые могут быть лучше / хуже-попробуйте search.npmjs.org.) с небольшой предварительной обработкой вы можете отфильтровать динамические страницы от статических и отправить их в правильный обработчик запросов.
Это, вероятно, будет немного лучше, так как вы будете передавать файл(ы), а не загружать его в память, как 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);
Это обновление ответ Мухаммеда Несвина
В Express 4.x, sendfile был устаревшим и 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')); });
лучший способ, который я узнал, это использовать express с html-файлами, поскольку express дает много преимуществ. Также вы можете расширить его до платформы 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");чистый и лучший..!!!
это более гибкий и простой способ, чтобы использовать
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...');
простой способ сделать это, положить все ваши файлы, включая индекс.html или что-то со всеми ресурсами, такими как CSS, JS и т. д. в папке public или вы можете назвать его как угодно, и теперь вы можете использовать express js и просто сказать приложению использовать _dirname как:
на сервере.js с помощью экспресс добавить эти
var express = require('express'); var app = express(); app.use(express.static(__dirname + '/public'));и если вы хотите иметь каталог seprate, добавьте новый каталог в общий каталог и используйте этот путь"/public / YourDirName"
Итак, что мы делаем вот именно? мы создаем экспресс-экземпляр с именем app, и мы даем адрес, если общедоступный каталог для доступа ко всем ресурсам. Надеюсь, это поможет !
Как насчет использования экспресс-модуля?
var app = require('express')(); app.get('/',function(request,response){ response.sendFile(__dirname+'/XXX.html'); }); app.listen('8000');затем вы можете использовать браузер, чтобы получить /localhost: 8000
Я думаю, что это был бы лучший вариант, поскольку он показывает 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 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') } }) }
используйте ejs вместо Джейд
npm install ejsприложение.js
app.engine('html', require('ejs').renderFile); app.set('view engine', 'html');./ маршруты / индекс.js
exports.index = function(req, res){ res.render('index', { title: 'ejs' });};
Это довольно старый вопрос...но если ваш вариант использования здесь-просто отправить определенную 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);
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-документ с помощью connect frame work. Я разместил свой 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);Я пробовал метод readFile () fs, но он не загружает изображения, поэтому я использовал фреймворк connect.
https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906
вот мои простые демо-коды для хост-статических HTML-файлов с помощью Express server!
надеюсь, что это поможет вам!
// 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}! `); });
Comments