Просто попробуйте Node.js noob здесь. Я пытаюсь выяснить, как загрузить и «отобразить» базовый HTML-файл, поэтому мне не нужно писать код, например, response.write('...<p>blahblahblah</p>...');
.Загрузка базового HTML в Node.js
ответ
Я только что нашел один путь с использованием 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);
});
Основная концепция - это просто чтение сырых файлов и сброс содержимого. Тем не менее, открытые для более чистых вариантов, хотя!
Вы можете эхо-файлы вручную, используя объект 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);
Да, это примерно то же самое, что и я, с кем-то. Спасибо за предложение Express. Это довольно мило, и я уверен, что буду использовать его для своего следующего проекта. Моя цель состояла в том, чтобы выяснить, как это делается под капотом, прежде чем я позволю фреймворку сделать тяжелый подъем для меня. –
хорошая стратегия ... – Martian2049
брандмауэр антивирус может быть отключен этот ход –
Я знаю, что это старый вопрос, но так как никто не упомянул об этом, я подумал, что стоит добавить:
Если вы в буквальном смысле хотите обслуживать статический контент (скажем, «о» странице, изображении, css и т. Д.), Вы можете использовать один из компонентов, обслуживающих статический контент, например node-static. (Есть другие, которые могут быть лучше/хуже - попробуйте search.npmjs.org.) С небольшим количеством предварительной обработки вы можете отфильтровать динамические страницы из статики и отправить их в нужный обработчик запросов.
+1 для узла-статического. это действительно простой способ поставить stati c файлов. – Nikwin
Ответ не загружает файл js правильно, используя node-static решает мою проблему. –
Возможно, это будет лучше, поскольку вы будете передавать файлы, а не загружать их все в память, например 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);
мы можем загрузить 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() из фс, но это не удается загрузить изображения, поэтому я использовал соединять рамки.
Я знаю, что это старый вопрос - вот простая утилита файлового сервера, если вы предпочитаете не использовать 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')
}
})
}
Это довольно старый вопрос ... но если ваш случай использования здесь просто послать определенный 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);
Используйте app.get, чтобы получить файл html. это просто!!
app.get('/', function(request, response){
response.sendfile('yourhtmlpagename.html');
});
его просто так. Для этого используйте экспресс-модуль. Установите экспресс: npm install express -g
Вы забыли упомянуть, что вам нужно «выразить». – shriek
выразить устаревший res.sendfile: вместо этого используйте res.sendFile http://stackoverflow.com/a/26079640/3166417 – itzhar
Хорошие ответы. Для тех, кто не знает, как использовать экспресс-тип перед app.get ....: 'var express = require ('express'); var app = express(); ' –
Это обновление Muhammed Neswine's answer
Экспресс 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'));
});
использование 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-файлами, поскольку экспресс дает много преимуществ. Также вы можете расширить его на платформу 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 и просто сказать приложению, чтобы использовать _dirname как:
в вашем server.js с помощью экспресса добавить эти
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/public'));
и если вы хотите иметь seprate каталог добавить новый реж под общим каталогом и используйте этот путь «/ public/YourDirName "
ТАК, что мы что вы здесь делаете? Мы создаем приложение с выраженным экземпляром с именем, и мы предоставляем адрес, если общий каталог имеет доступ ко всем ресурсам. Надеюсь, это поможет!
Как насчет использования экспресс-модуля?
var app = require('express')();
app.get('/',function(request,response){
response.sendFile(__dirname+'/XXX.html');
});
app.listen('8000');
затем, вы можете использовать браузер, чтобы получить/локальный: 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}/`);
})
});
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}!
`);
});
http://expressjs.com/ru/starter/basic-routing.html – xgqfrms
Это более гибкий и простой способ использовать 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...');
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 ");
- 1. HTML + Node.js Загрузка файла
- 2. Html базового тег с Node.js сервером
- 3. Настройка базового сервера node.js
- 4. Ajax загрузка файлов в Node.js
- 5. Node.js - Загрузка файлов в Runtime
- 6. Загрузка параметризованного модуля в Node.js
- 7. Загрузка файла Node.js
- 8. Загрузка Torrent с Node.JS
- 9. Загрузка нескольких файлов синхронно в node.js
- 10. node.js с readFile html, но не загрузка/поиск файла jquery
- 11. Чтение HTML в Node.js
- 12. Mashape Imgur node.js Загрузка изображения
- 13. Загрузка html в Bluemix
- 14. Загрузка изображений в HTML
- 15. Загрузка Steroids.js с помощью Node.js
- 16. Загрузка файлов с сервера Node.js
- 17. Загрузка двоичного файла на Node.js
- 18. OSX Node.js Загрузка файла ENOENT
- 19. Node.js/Express Async Загрузка файла
- 20. Загрузка Повсеместно данных базового класса родительского класс
- 21. Загрузка базового шаблона с использованием строки маршрутизатора
- 22. node.js многофайловая загрузка не работает
- 23. Node.js многопользовательская загрузка не работает
- 24. Загрузка файла в Netsuite с помощью Node.js
- 25. Загрузка файла с прерывистым соединением в node.js
- 26. node.js загрузка вывода imagemagick в AWS S3
- 27. Загрузка списка изображений с OpenCV в Node.js
- 28. Загрузка xml-файлов через node.js в windows
- 29. Идея базового LoopingSelector в CSS, HTML
- 30. Копирование в буфер обмена для базового html
вы должны использовать фс.readFileSync в вашем случае, было бы плохо, если бы страница отображалась как неопределенная. Но да, это хороший способ сделать базовый html-сервер. – generalhenry
Далее вы можете добавить простую кэширование шаблонов, например: cache ['index'] = data; // Дано var cache = {}; –
'sys = require ('util')' не требуется, поскольку на консоль ничего не печатается. – Bakudan