답변:
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.');}
다음 과 함께 사용하십시오. 이 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);
나는 이것이 오래된 질문이라는 것을 알고 있지만 아무도 언급하지 않았으므로 추가 할 가치가 있다고 생각했습니다.
문자 그대로 정적 컨텐츠 (예 : '정보'페이지, 이미지, 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);
이것은 Muhammed Neswine의 답변에 대한 업데이트입니다.
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...');
내가 배운 가장 좋은 방법은 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");
깨끗하고 최고 .. !!!
쉬운 방법은 index.html을 포함한 모든 파일이나 CSS, JS 등과 같은 모든 리소스가있는 폴더를 공용 폴더에 넣거나 원하는 이름을 지정할 수 있으며 express js를 사용하고 응용 프로그램에 알려주는 것입니다 _dirname을 다음과 같이 사용하십시오.
express를 사용하여 server.js에 다음을 추가하십시오.
var express = require('express');
var app = express();
app.use(express.static(__dirname + '/public'));
seprate 디렉토리를 사용하려면 공용 디렉토리 아래에 새 디렉토리를 추가하고 해당 경로 "/ public / YourDirName"을 사용하십시오.
그래서 우리가 여기서 정확히 무엇을하고 있습니까? 우리는 app이라는 Express 인스턴스를 만들고 있으며 공용 디렉토리가 모든 리소스에 액세스 할 수 있도록 주소를 제공하고 있습니다. 도움이 되었기를 바랍니다 !
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()
둘 다 유효합니다.
서버를 실행하는 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}/`);
})
});
파이프를 사용하면 정말 간단합니다. 다음은 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 +
- 사용자가 아니라이 있는지 확인해야합니다 경로의 시작을 확인할 수있는 경우.
나는 이것이 오래된 질문이라는 것을 알고 있습니다. 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 문서를로드 할 수 있습니다. 아래 코드와 노드 모듈이있는 프로젝트의 공용 폴더에 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}!
`);
});