[html] Node.js에서 기본 HTML로드

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

기본 개념은 단지 파일을 읽고 내용을 덤프하는 것입니다. 그래도 더 깨끗한 옵션을 열 수 있습니다!


답변

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


답변

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