본문 바로가기

NodeJS/pug

node.js db 조회해서 view pug로 가져와 뿌릴 때

데이터베이스에 있는 board 테이블의 조회해서 pug 문법으로 뿌리는 예제(?)입니다. 혼자 작업하다가 수도없이 만난 에러를 물리치고 어쨰꺼나 정상 작동하니까 기뻐서 블로그에 정리해둡니다. 지금 이 글을 쓰고 있는 사람!! 나중에 까먹지 마시라~~!

 

db_con.js

데이터베이스 연결정보가 있는 파일입니다. module.exports로 다른 페이지에서 불러올 수 있도록 했습니다.

// mysql 모듈 사용
const mysql = require('mysql');

// 연결할 DB 정보입력
const connection = mysql.createConnection({
  host: '내도메인.com',
  user: '아이디',
  password: '비밀번호',
  database: '데이터베이스이름',
  port: '3306',
  dateStrings:'date' // 날짜 가져오는형식 떄문에 ex)2020-11-01
});

module.exports = connection;

 

routes/board.js

db_con 파일을 불러들어와서 sql문을 만들고 pug로 렌더링 될 때, 'results'로 통으로 넘겨버리기. 

처음에는 렌더링 될때, forEach문을 사용했는데, 에러가 났었습니다. 그러니까.. 한번만 되는건데 forEach로 여러번 하려니까 안된다는 그런 에러내용이었어요. 그래서 forEach는 pug view파일 쪽에서 해야되는 것으로 수정했습니다.

const db_con = require('./db_con');
const express = require('express');
const router = express.Router();

router.get('/', function(req, res, next) {
  const sql = 'select title, contents, date from board order by date desc';
  db_con.query(sql, (error, results, fields) => {
    if (error) throw error;
    res.render('blog', { title: 'Blog', results});
  });
});

module.exports = router;

 

view/board.pug

forEach문으로 꺼내서 반복하기. pug에서 변수(?) 받아온 인자를 쓸 때, 샵(#)을 붙여주고 중괄호 { }로 감싸줘야 합니다. 그리고 javascript를 넣어줄 때는 마이너스기호 ( - )를 앞에다가 써줍니다. forEach문이 닫을때도 ( - )써줘서 가독성 있게 했습니다. 마지막 줄의 마이너스 기호는 사실 안써줘도 됩니다. 

h1.redd #{title} TEST 중입니다. 
  - results.forEach((item, i) => {
      section 
        h3 #{item.title}
        p= item.contents
  - });

 

728x90
300x250