[javascript] 기본 HTML 뷰를 렌더링 하시겠습니까?

Express 프레임 워크를 사용하여 시작하려고하는 기본 node.js 앱이 있습니다. 파일 이있는 views폴더가 index.html있습니다. 그러나 웹 브라우저를로드 할 때 다음 오류가 발생합니다.

오류 : ‘html’모듈을 찾을 수 없습니다

아래는 내 코드입니다.

var express = require('express');
var app = express.createServer();

app.use(express.staticProvider(__dirname + '/public'));

app.get('/', function(req, res) {
    res.render('index.html');
});

app.listen(8080, '127.0.0.1')

내가 여기서 무엇을 놓치고 있습니까?



답변

옥에 일반 HTML 페이지를 포함시킬 수 있습니다.

views / index.jade에서

include plain.html

views / plain.html에서

<!DOCTYPE html>
...

app.js는 여전히 옥을 렌더링 할 수 있습니다.

res.render(index)


답변

이 답변 중 대부분이 구식입니다.

express 3.0.0 및 3.1.0을 사용하면 다음이 작동합니다.

app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);

express 3.4+에 대한 대안 구문과주의 사항은 아래 주석을 참조하십시오.

app.set('view engine', 'ejs');

그런 다음 다음과 같은 작업을 수행 할 수 있습니다.

app.get('/about', function (req, res)
{
    res.render('about.html');
});

views하위 폴더에 보기가 있고 ejs노드 모듈 을 설치했다고 가정합니다 . 그렇지 않은 경우 노드 콘솔에서 다음을 실행하십시오.

npm install ejs --save


답변

Express.js 가이드 : 뷰 렌더링에서

보기 파일 이름의 형식은 취 Express.ENGINE, ENGINE해야합니다 모듈의 이름입니다. 예를 들어, 뷰 layout.ejs는 뷰 시스템에를 전달할 것입니다.require('ejs') 로드되는 모듈은 Express를 준수하기 위해 메소드exports.render(str, options)내 보내야 하지만 app.register()엔진을 파일 확장자에 맵핑하는 데 사용될 foo.html수 있으므로 jade에 의해 렌더링 될 수 있습니다.

따라서 간단한 렌더러를 만들거나 jade를 사용하십시오.

 app.register('.html', require('jade'));

대해 자세히 알아보십시오 app.register.

Express 3에서는이 방법의 이름이 바뀌 었습니다. app.engine


답변

HTML 파일을 읽고 보낼 수도 있습니다.

app.get('/', (req, res) => {
    fs.readFile(__dirname + '/public/index.html', 'utf8', (err, text) => {
        res.send(text);
    });
});


답변

이 시도. 그것은 나를 위해 작동합니다.

app.configure(function(){

  .....

  // disable layout
  app.set("view options", {layout: false});

  // make a custom html template
  app.register('.html', {
    compile: function(str, options){
      return function(locals){
        return str;
      };
    }
  });
});

....

app.get('/', function(req, res){
  res.render("index.html");
});


답변

app.get('/', function (req, res) {
res.sendfile(__dirname + '/public/index.html');
});


답변

express@~3.0.0을 사용하는 경우 예제에서 아래 행을 변경하십시오.

app.use(express.staticProvider(__dirname + '/public'));

이런 식으로 :

app.set("view options", {layout: false});
app.use(express.static(__dirname + '/public'));

Express API 페이지 에 설명 된대로 만들었으며 매력처럼 작동합니다. 이 설정을 사용하면 추가 코드를 작성할 필요가 없으므로 마이크로 프로덕션 또는 테스트에 사용하기에 충분히 쉬워집니다.

전체 코드는 다음과 같습니다.

var express = require('express');
var app = express.createServer();

app.set("view options", {layout: false});
app.use(express.static(__dirname + '/public'));

app.get('/', function(req, res) {
    res.render('index.html');
});

app.listen(8080, '127.0.0.1')