Я пытаюсь выяснить, как загрузить и отобразить базовый файл HTML, чтобы мне не приходилось писать код, подобный следующему:
response.write('...<p>blahblahblah</p>...');
Я пытаюсь выяснить, как загрузить и отобразить базовый файл HTML, чтобы мне не приходилось писать код, подобный следующему:
response.write('...<p>blahblahblah</p>...');
Ответы:
Я только что нашел один способ, используя библиотеку 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);
});
Основная концепция - это просто чтение файлов и вывод содержимого. Тем не менее, все еще открыт для более чистых вариантов!
sys = require('util')
не требуется, поскольку на консоль ничего не выводится.
fs.readFile
мог быть помещен в вызов http.createServer
, позволяя обработать ошибку. Ответ Используйте Стефан с if (err) { console.log('something bad'); return res.end('Oops! Something bad happened.');}
The return
заявлением является простой вещью , что новые пользователи могут не заметить.
используйте app.get, чтобы получить HTML-файл. это просто!!
const express = require('express');
const app = new express();
app.get('/', function(request, response){
response.sendFile('absolutePathToYour/htmlPage.html');
});
это так просто. Для этого используйте экспресс-модуль. Установить экспресс:npm install express -g
express
.
var express = require('express'); var app = express();
npm install express --save
вместо -g
Вы можете отображать файлы вручную, используя объект 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);
Я знаю, что это старый вопрос, но, поскольку никто не упомянул об этом, я подумал, что стоит добавить:
Если вы буквально хотите обслуживать статический контент (например, страницу about, image, 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'));
});
Это более гибкий и простой способ использования 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-файлами, так как экспресс дает много преимуществ. Кроме того, вы можете расширить его до платформы 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 и т. Д., В общедоступную папку, или вы можете назвать ее как угодно, и теперь вы можете использовать express js и просто сообщить app использовать _dirname как:
В ваш server.js используя экспресс добавить эти
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/public'));
и если вы хотите иметь отдельный каталог, добавьте новый каталог в публичный каталог и используйте этот путь "/ public / YourDirName"
ТАК что мы тут делаем? мы создаем экспресс-экземпляр с именем app и даем адрес, если публичный каталог для доступа ко всем ресурсам. Надеюсь это поможет !
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()
, но скорее response.writeHead()
.
response.writeHeader()
и response.writeHead()
оба действительны.
Это просто очень просто, если вы используете трубу. Ниже приведен фрагмент кода 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...');
../
. Если бы я ничего не делал, кроме как изменился __dirname + "/index.html'
на что-то вроде __dirname + requestedPageFromHeader
, я считаю, что полученный код имел бы эту уязвимость. Символы пути к каталогу, такие как, ~
будут в порядке, если вы включите __dirname +
- если пользователь может определить начало пути, нужно будет также проверить их.
Я думаю, что это был бы лучший вариант, поскольку он показывает 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
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' });};
Это довольно старый вопрос ... но если в данном случае вы просто отправляете определенную 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);
мы можем загрузить 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);
Я пробовал метод readFile () для fs, но он не загружает изображения, поэтому я использовал платформу подключения.
https://gist.github.com/xgqfrms-GitHub/7697d5975bdffe8d474ac19ef906e906
Вот мои простые демонстрационные коды для размещения статических файлов HTML с использованием сервера Express!
надеюсь, это поможет вам!
// 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}!
`);
});