express-ejs-layout 활용하기
참고한 링크
https://github.com/Soarez/express-ejs-layouts#readme
https://byungjinkim.tistory.com/31
https://velog.io/@gidskql6671/Nodejs-express-ejs-layouts
layout 사용하기
npm install express-ejs-layouts를 설치한다const layout = require('express-ejs-layouts'); app.use(layout); app.set('layout', 'layout/layout');로
layout를 미들웨어로 추가한다.set을 한 부분은layout폴더의layout파일을 사용하겠다는 선언이다.layout.ejs파일을 만들고 아래처럼 내용을 넣자<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <%- navbar %> <%- body %> <%- footer %> </body> </html>그리고 기존에 사용하던
ejs파일에서는 아래처럼 만들면 된다.contentFor을 사용함.<%- contentFor('navbar') %> <p> this is navbar!! </p> <%- contentFor('body') %> <p> this is body~ </p> <%- contentFor('footer') %> <p> this is footer... </p>이렇게 작성하고 페이지에 접속하면 잘 나온다.ㄴ
한발자국 더 나가기
위처럼 작성했을 때 만약 ejs 파일에서 navbar, body, footer 셋 중 하나라도 contentFor 로 넣어주지 않는다면 에러가 발생한다!!!
따라서 아무것도 들어가지 않았을 경우 에러가 발생하지 않게 수정을 해주자
defineContent 선택적으로 ejs 파일 적용하기
Optional Sections
layout 파일로 돌아가서 defineContent 를 사용해서 레이아웃을 잡아주자
이렇게 만들면 다른 view 파일에서 내용을 빠뜨려도 에러가 발생하지 않는다.
script 를 넣어주는 방법
미들웨어를 조금만 set 해주면 아무곳에나 script 를 넣어도 찰떡같이 해준다.
아주 간단한 방법으로 view 파일의 하단에 script 를 넣어주는 방법을 생각할 수 있다.
그러나 이렇게 하면 문제가 될 수 있는게 layout 파일에 여러 개의 view 가 들어오는데 무작정 script 태그를 넣어주게 되면 아래의 사진처럼 DOM 중간에 script 태그가 섞이게 된다.
해결
express-ejs-layout 에서 제공하는 방법을 사용하면 된다.
기존의 코드에
app.set("layout extractScripts", true)를 넣어준다. 내부에 들어가는 문자열에 띄어쓰기가 들어가있다고 해서 수정할 의문을 갖지말고 그냥 사용하면 된다.layout.ejs파일을 아래처럼 수정해주자이제 view파일의 어느곳에
script태그를 넣어도layout의 마지막에script가 생성된다. 결과는 아래와 같다.
style 을 넣어주는 방법
script와 다를게 없다.
app.set("layout extractStyles", true);를 추가한다.layout.ejs를 아래처럼 수정해준다.이제
ejs에서style.css를 그냥 넣어주면 끈
두 개 이상의 레이아웃 사용하기
Last updated
Was this helpful?