- Today
- Total
- performance.now()
- ToDo
- repaint
- [Vue warn]: inject() can only be used inside setup() or functional components.
- 함수형 프로그래밍
- vue-router 네비게이션 가드
- 멀티레포 방식
- 파라미터 전송 방법
- Next.js 라우팅
- Vue 화면 접근 전 권한 체크
- express 파라미터
- git
- reflow
- 모놀리식 아키텍쳐
- chart.js 레전드 레이블 색상 변경
- chart.js 툴팁 레이블 색상 변경
- chart.js 레이블 색상 변경
- 모노레포 방식
- Learning React
- chart.js 축 font-size
빵 입니다.
[handlebars] configuration 에러 본문
폴더 구조
├── app.js
└── views
├── layout
│ ├── inc
│ │ ├── header.hbs
│ │ └── footet.hbs
│ └── layout.hbs
└── partials
└── list.hbs
layout.hbs
{{> header }}
{{> left }}
{{{body}}}
{{> footer }}
npmjs => express-handlebars에 나오는 readme에 나오는대로 추가했다.
handlebars 템플릿 사용을 위해 app.js configuration 을 추가했다.
var express = require('express');
var app = express();
var exphbs = require('express-handlebars');
app.set('views', __dirname + '/views/partials');
var hbs = exphbs.create({
extname: '.hbs',
defaultLayout: 'layout',
layoutsDir: __dirname + '/views/layouts',
partialsDir: __dirname + '/views/layouts/inc'
});
app.engine('.hbs', hbs.engine);
app.set('view engine', '.hbs');
Line 1,2,3 필요한 패키지들을 불러온다.
Line 5 사용자 정의 위치 설정
콘텐츠들이 들어가 있는 위치를 설정하고, 레이아웃에 관한 설절은 instance 만들 때 설정했다.
Line 6~10 ExpressHandlebars instance를 만든다.
- Line 7 extname 어떤 확장자명을 사용할지 설정하는 부분
app.engine()과 app.set()을 호출 할 때 등록하는 뷰 엔진의 확장자와 같게 설정해야 한다.
같게 설정하지 않으면 아래와 같은 뷰 엔진을 제공하지 못한다는 에러가 뜬다.
Error: Module "handlebars" does not provide a view engine.
at new View (경로\node_modules\express\lib\view.js:84:13)
at Function.render (경로\node_modules\express\lib\application.js:570:12)
at ServerResponse.render (경로\node_modules\express\lib\response.js:1008:7)
at 경로:7:13
at 경로:4598:16
at 경로:4122:12
at process.nextTick (경로:35:39)
at process._tickCallback (internal/process/next_tick.js:61:11)
- Line 8 defaultLayout 기본 레이아웃으로 사용할 템플릿 이름
- Line 9 layoutsDir 기본 레이아웃인 defaultLayout의 경로 설정
Line 5 사용자 정의 위치 설정을 따로 하지 않았을 경우 views/layouts/에서 파일을 찾지만,
app.set()에서 기본 경로를 partials로 했기 때문에, views/partials/layouts/에서 파일을 찾는다.
경로를 제대로 못 찾기 때문에 lookup 에러가 뜬다.
Error: Failed to lookup view "list" in views directory "경로"
at Function.render (경로\node_modules\express\lib\application.js:580:17)
at ServerResponse.render (경로\node_modules\express\lib\response.js:1008:7)
at 경로:7:13
at 경로:4598:16
at :4122:12
at process.nextTick (:35:39)
at process._tickCallback (internal/process/next_tick.js:61:11)
- Line 10 partialsDir defaultLayout의 경로 설정
app.set()에서 기본 경로를 partials로 했기 때문에, views/partials/layouts/에서 {{header}}, {{footer}}를 찾는다.
위와 마찬가지로 경로 설정을 해준다.
'프론트엔드 > Node.js' 카테고리의 다른 글
[Express JS] 클라이언트가 서버로 파라미터를 전송하는 방법 (0) | 2024.11.06 |
---|---|
npm does not support Node.js (0) | 2022.07.25 |
[mongoose] remove() / deleteOne() / findOneAndDelete() 차이 (0) | 2019.04.26 |
[express] express 4.x PUT, DELETE method 사용하기 (0) | 2019.04.23 |