Express에서 HTML을 뷰 엔진으로 사용하려면 어떻게합니까?


130

나는 씨앗 에서이 간단한 변경을 시도하고 해당 .html 파일 (예 : index.html)을 만들었습니다.

//app.set('view engine', 'jade');
app.set('view engine', 'html');

이 파일은 동일하게 유지되었습니다.

exports.index = function(req, res){
  res.render('index');
};

그러나 달리는 동안 나는 얻는다

500 오류 : 'html'모듈을 찾을 수 없습니다

'ejs'를 사용하는 유일한 옵션입니까? 내 의도는 AngularJS와 함께 일반 HTML을 사용하는 것이 었습니다.


7
답변은 다음 주제를 참조하십시오. stackoverflow.com/questions/4529586/… 이것이 도움이
roland

3
app.engine ( 'html', require ( 'ejs'). renderFile);
Dinesh Kanivu

답변:


91

다른 링크의 답변은 효과가 있지만 HTML을 제공하기 위해 펑키 라우팅을 설정하지 않는 한 뷰 엔진을 전혀 사용할 필요가 없습니다. 대신 정적 미들웨어를 사용하십시오.

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

3
계속해서 app.set ( 'view engine', html)에 대한 참조를 주석 처리했습니다. 그런 다음 "기본 엔진이 지정되지 않았으며 확장명이 제공되지 않았습니다"라는 오류 메시지가 표시됩니다. 그러나 res.render ( "index")를 res.render ( "index.html")로 변경하면 다음 오류가 발생합니다. TypeError : 개체 # <View>의 속성 'engine'이 함수가 아닙니다.
Julio

4
더 이상 뷰 엔진이 없으므로 더 이상 res.render()작동 하지 않을 것이라고 생각 합니다. 대신 원시 HTML 파일을 넣고 public정적 미들웨어가 파일을 직접 처리하도록하십시오. 이보다 더 멋진 경로가 필요한 경우 고유 한 HTML보기 엔진을 설정할 수 있습니다.
Nick McCurdy

6
그렇다면 app.get () 호출에서 무엇을 작성합니까?
ajbraus

5
@ajbraus app.get () 호출이 전혀 필요하지 않습니다. 이것은 / public 폴더에있는 모든 html 파일을 직접 제공합니다. 브라우저에서 html을 바로 가리키면됩니다. 기본적으로 라우팅이 없습니다
dm76

내가 겪고있는 문제는로드 된 페이지를 새로 고치면 오류 : 오류가 발생했습니다. 기본 엔진이 지정되지 않았으며 확장명이 제공되지 않았습니다. 그런 다음 Auth, {provide : LocationStrategy, useClass : HashLocationStrategy}]를 사용하면 URL에 해시가 표시되어 다른 이유로 어려움이 있습니다. 이 주위에 방법이 있습니까?
우노

33

렌더 엔진이 jade 대신 html을 허용하도록하려면 다음 단계를 수행하십시오.

  1. 디렉토리에 콘솔통합 하고 설치 하십시오.

     npm install consolidate
     npm install swig
  2. app.js 파일에 다음 줄을 추가하십시오.

    var cons = require('consolidate');
    
    // view engine setup
    app.engine('html', cons.swig)
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'html');
  3. “views”폴더 안에 .html로 뷰 템플릿을 추가하십시오. 노드 서버를 다시 시작하고 브라우저에서 앱을 시작하십시오.

이것이 아무런 문제없이 html을 렌더링하지만 JADE를 배우는 것이 좋습니다. Jade는 놀라운 템플릿 엔진이며이를 배우면 더 나은 디자인 및 확장 성을 달성하는 데 도움이됩니다.


모든 단계 후에 '엔진'방법이 없습니다
ImranNaqvi

어떤 Express 버전을 사용하고 있습니까? Express 4.x에는 app.engine API가 포함되어 있습니다. 자세한 내용은 @ expressjs.com/en/api.html#app.engine
AnandShanbhag

잘 했어! 나는 한 살짜리 답변이 처음으로 작동하는 것을 좋아합니다.
Matthew Snell

왜 여전히 내 CSS와 기타를 렌더링 할 수 없습니다
exe

23

apps.js에 추가하십시오.

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');

이제 뷰 파일을 .html로 유지하면서 ejs 뷰 엔진을 사용할 수 있습니다

출처 : http://www.makebetterthings.com/node-js/how-to-use-html-with-express-node-js/

이 두 패키지를 설치해야합니다.

`npm install ejs --save`
`npm install path --save`

그런 다음 필요한 패키지를 가져옵니다.

`var path = require('path');`


이렇게하면 뷰 를 .ejs 대신 .html 로 저장할 수 있습니다 . html을 지원하지만 ej를 인식하지 못하는 IDE로 작업하는 동안 매우 유용합니다.


1
app.set ( 'views', path.join (__ dirname, '/ path / to / your / folder')); app.set ( "view options", {layout : false}); app.engine ( 'html', function (path, opt, fn) {fs.readFile (path, 'utf-8', function (error, str) {if (error) return str; return fn (null, str) ;});});
nilakantha singh deo

16

서버 구성에 이것을 시도하십시오

app.configure(function() {
    app.use(express.static(__dirname + '/public'));         // set the static files location
    app.use(express.logger('dev'));                         // log every request to the console
    app.use(express.bodyParser());                          // pull information from html in POST
    app.use(express.methodOverride());                      // simulate DELETE and PUT
    app.use(express.favicon(__dirname + '/public/img/favicon.ico'));
});

경로에 대한 콜백 함수는 다음과 같습니다.

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

14

간단한 일반 HTML 파일로 각도를 사용하려는 경우 뷰 엔진이 필요하지 않습니다. 방법은 다음과 같습니다. route.js파일에서 :

router.get('/', (req, res) => {
   res.sendFile('index.html', {
     root: 'yourPathToIndexDirectory'
   });
});

1
절대적으로 가장 쉬운 솔루션입니다. 뷰 엔진이 설치 / 구성되어 있지 않고 HTML이 전송됩니다.
Newclique

7

https://www.npmjs.com/package/express-es6-template-engine- 매우 가볍고 놀랍도록 빠른 템플릿 엔진을 사용하는 것이 좋습니다 . expressjs 없이도 작동 할 수 있으므로 이름이 약간 오도됩니다.

express-es6-template-engine앱 에 통합 하는 데 필요한 기본 사항 은 매우 간단하고 구현하기가 매우 쉽습니다.

const express = require('express'),
  es6Renderer = require('express-es6-template-engine'),
  app = express();
  
app.engine('html', es6Renderer);
app.set('views', 'views');
app.set('view engine', 'html');
 
app.get('/', function(req, res) {
  res.render('index', {locals: {title: 'Welcome!'}});
});
 
app.listen(3000);
index.html파일 의 내용은 'views'디렉토리 안에 있습니다.

<!DOCTYPE html>
<html>
<body>
    <h1>${title}</h1>
</body>
</html>

4

대답은 매우 간단합니다. * .html 페이지를 렌더링하려면 app.engine ( 'html')을 사용해야합니다. 문제를 해결해야합니다.

app.set('views', path.join(__dirname, 'views'));
**// Set EJS View Engine**
app.set('view engine','ejs');
**// Set HTML engine**
app.engine('html', require('ejs').renderFile);

.html 파일이 작동합니다


2
불완전한 답변. 이러한 변경은 어디에서 이루어 집니까? app.js를 가정하지만 답변은 구체적이어야합니다. 또한이 세 가지 변경 / 추가 만 수행 한 결과가 "모듈 'ejs'를 찾을 수 없음"이므로 변경이 필요한 것은 아닙니다. 당신의 대답은 아마도 가깝지 만 조금 더 많은 정보를 추가해야합니다.
Newclique

또한 렌더링은 파일을 제공하는 것과 다릅니다. 렌더링에는 서버가 파일을 사전 처리하고 render 메소드에 전달 된 동적 컨텐츠를 추가해야합니다. 어쩌면 그것은 OP가 원했던 것이지만 일부 사람들은 렌더링과 봉사를 혼동합니다. 매우 다른 개념.
Newclique

@는 ejs 파일이 아닌 html 파일을 렌더링하는 데 사용됩니다.
Dinesh Kanivu

3

ejs 엔진을 사용하여 HTML 파일을 렌더링 할 수 있습니다.

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

"/ views"아래의 파일 이름이 ".ejs"인지 확인하십시오.

예를 들어 "index.ejs"입니다.


작동하지만 약간 해키 느낌입니다. .html 대신 .ejs를 사용할 때주의해야 할 사항이 있습니까? 아마도 가장 빠른 수정을 위해 건배는 모두 똑같이 제안했습니다!
mikeym

3

HTML 미들웨어 주석

//app.set('view engine', 'html');

대신 다음을 사용하십시오.

app.get("/",(req,res)=>{
    res.sendFile("index.html");
});

2

html은 뷰 엔진이 아니지만 ejs는 그 안에 html 코드를 작성할 수있는 가능성을 제공합니다


1

라우팅을 통해 서버 HTML 페이지에 연결했습니다.

var hbs = require('express-hbs');
app.engine('hbs', hbs.express4({
  partialsDir: __dirname + '/views/partials'
}));
app.set('views', __dirname + '/views');
app.set('view engine', 'hbs');

.html 파일의 이름을 .hbs 파일로 변경했습니다.-핸들 바는 일반 HTML을 지원합니다


1

렌더 엔진이 jade 대신 html을 허용하도록하려면 다음 단계를 수행하십시오.

Install consolidate and swig to your directory.

 npm install consolidate
 npm install swig

add following lines to your app.js file

var cons = require('consolidate');

// view engine setup
app.engine('html', cons.swig)
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');

add your view templates as .html inside views folder. Restart you node server and start the app in the browser.

이 작동합니다


1

이 간단한 해결책을 시도해보십시오.

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

1
당신은 모든 라인을 추가해야합니다, 이것 자체로는 작동하지 않습니다.
MushyPeas

1

ejs 템플릿 설치

npm install ejs --save

app.js에서 ejs 참조

app.set('views', path.join(__dirname, 'views'));`
app.set('view engine', 'ejs');

views / indes.ejs와 같은 뷰에서 ejs 템플릿 생성 및 라우터에서 ejs tempalte 사용

router.get('/', function(req, res, next) {
    res.render('index', { title: 'Express' });
});

0

swig의 도움으로 HTML 템플릿을 렌더링하십시오.

//require module swig    
    var swig = require('swig');

// view engine setup    
    app.set('views', path.join(__dirname, 'views'));
    app.engine('html', swig.renderFile);
    app.set('view engine', 'html');

0

HTML 파일은 렌더링 할 필요가 없습니다.
렌더링 엔진이하는 일은 Html 파일이 아닌 파일을 Html 파일로 바꾸는 것입니다.
HTML 파일을 보내려면 다음을 수행하십시오.

res.sendFile("index.html");

__dirname+"/index.html"express가 정확한 경로를 알 수 있도록 사용해야 할 수도 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.