// SQLite DB 연결 const db = new sqlite3.Database('mydb.db', (err) => { if (err) { console.error(err.message); } console.log('Connected to the database.'); });
// 루트 경로에서 index.ejs 렌더링 app.get('/', (req, res) => { // SQLite DB에서 데이터 조회 db.get('SELECT * FROM mytable', (err, row) => { if (err) { console.error(err.message); return res.status(500).send('Internal Server Error'); }
// index.ejs 렌더링 및 데이터 전달 ejs.renderFile('index.ejs', { title: row.title, description: row.description, author: row.author }, (err, renderedHtml) => { if (err) { console.error(err.message); return res.status(500).send('Internal Server Error'); } res.send(renderedHtml); }); }); });
// 서버 시작 const port = 3000; app.listen(port, () => { console.log(`Server is running on http://localhost:${port}`); });
위의 코드 예시는 다음과 같은 과정을 수행합니다:
index.html은 EJS 문법(<%= %>)을 사용하여 동적으로 제목, 설명, 제작자 정보를 표시하는 간단한 HTML 템플릿입니다.
app.js는 Express와 EJS를 사용하여 웹 서버를 구성합니다.
SQLite 데이터베이스를 연결하고, mytable에서 제목, 설명, 제작자 정보를 가져옵니다.
웹 서버에 들어오는 루트 경로 요청(http://localhost:3000/)에 대해 index.ejs 파일을 렌더링하여 클라이언트에 전달합니다.
// 데이터베이스 파일 생성 및 연결 const db = new sqlite3.Database('mydb.db', (err) => { if (err) { console.error(err.message); return; } console.log('Connected to the database.');
// 테이블 생성 db.run(` CREATE TABLE IF NOT EXISTS mytable ( id INTEGER PRIMARY KEY, title TEXT, description TEXT, author TEXT ) `, (err) => { if (err) { console.error(err.message); return; } console.log('Table "mytable" created.');
// 데이터 추가 const title = 'Sample Title'; const description = 'This is a sample description.'; const author = 'John Doe';
// 데이터베이스 연결 종료 db.close((err) => { if (err) { console.error(err.message); return; } console.log('Database connection closed.'); }); }); }); });
위의 코드는 다음과 같은 작업을 수행합니다:
‘mydb.db’라는 SQLite 데이터베이스 파일을 생성하고 연결합니다.
‘mytable’이라는 테이블을 생성합니다. 해당 테이블에는 id(자동 생성된 고유 번호), title, description, author라는 컬럼이 있습니다.
‘mytable’에 샘플 데이터를 추가합니다. 이 예시에서는 하나의 레코드만 추가했습니다.
데이터베이스 연결을 종료합니다.
위의 예시 코드를 실행하면 ‘mydb.db’ 파일이 생성되고, ‘mytable’ 테이블이 생성되며, 샘플 데이터가 추가됩니다. 이제 앞서 작성한 Node.js와 EJS 코드에서 해당 데이터베이스를 사용하여 제목, 설명, 제작자 정보를 가져와서 렌더링할 수 있을 것입니다.
Person:
위의 소스에서 브라우저에서 /input을 요청하면 제목, 설명, 제작자를 입력하는 화면이 나온다. 그곳에서 입력하면 db에 저장되는 기능을 추가해줘
ChatGPT:
앞서 작성한 코드에 “제목, 설명, 제작자를 입력하는 화면이 나오는 기능”을 추가하고, 사용자가 입력한 데이터를 SQLite 데이터베이스에 저장하는 기능을 구현해보겠습니다.
// SQLite DB 연결 const db = new sqlite3.Database('mydb.db', (err) => { if (err) { console.error(err.message); } console.log('Connected to the database.'); });
// Body-parser 미들웨어 등록 app.use(bodyParser.urlencoded({ extended: true }));
// 루트 경로에서 index.ejs 렌더링 app.get('/', (req, res) => { // SQLite DB에서 데이터 조회 db.get('SELECT * FROM mytable', (err, row) => { if (err) { console.error(err.message); return res.status(500).send('Internal Server Error'); }
// index.ejs 렌더링 및 데이터 전달 ejs.renderFile('index.ejs', { title: row.title, description: row.description, author: row.author }, (err, renderedHtml) => { if (err) { console.error(err.message); return res.status(500).send('Internal Server Error'); } res.send(renderedHtml); }); }); });
// 데이터 입력 페이지 렌더링 app.get('/input', (req, res) => { ejs.renderFile('input.ejs', (err, renderedHtml) => { if (err) { console.error(err.message); return res.status(500).send('Internal Server Error'); } res.send(renderedHtml); }); });
// 데이터 입력 처리 app.post('/input', (req, res) => { const title = req.body.title; const description = req.body.description; const author = req.body.author;
// 데이터 삽입 db.run('INSERT INTO mytable (title, description, author) VALUES (?, ?, ?)', [title, description, author], (err) => { if (err) { console.error(err.message); return res.status(500).send('Internal Server Error'); } console.log('Data inserted successfully.'); res.redirect('/'); }); });
// 서버 시작 const port = 3000; app.listen(port, () => { console.log(`Server is running on http://localhost:${port}`); });
위의 코드 예시는 다음과 같은 변경을 수행합니다:
index.html에 데이터 입력을 위한 form을 추가합니다. 사용자가 제목, 설명, 제작자를 입력하고 “저장” 버튼을 누르면 /input 경로로 POST 요청이 전송됩니다.
app.js에 /input 경로에 대한 GET 및 POST 핸들러를 추가합니다. GET 요청 시 “input.ejs”를 렌더링하여 데이터 입력 페이지를 보여줍니다. POST 요청 시 사용자가 입력한 데이터를 SQLite 데이터베이스에 삽입합니다.
데이터 삽입 후에는 / 경로로 리다이렉션하여 변경된 데이터를 확인할 수 있도록 합니다.
위의 코드를 실행하고 http://localhost:3000/input에 접속하면 데이터 입력 페이지가 나타납니다. 사용자가 데이터를 입력하고 저장하면 SQLite 데이터베이스에 저장되고, 메인 페이지(http://localhost:3000/)에서 변경된 데이터를 확인할 수 있습니다.
Person:
위의 form 입력화면인 index.html을 cms.html로 바꾸어주고 node.js에서 호출할 수 있도록 만들어주세요
ChatGPT:
Sure! 아래는 cms.html로 변경한 예시 코드입니다. 그리고 app.js에서 /cms 경로에 대한 핸들러를 추가하여 cms.html을 렌더링할 수 있도록 합니다.
// SQLite DB 연결 const db = new sqlite3.Database('mydb.db', (err) => { if (err) { console.error(err.message); } console.log('Connected to the database.'); });
// Body-parser 미들웨어 등록 app.use(bodyParser.urlencoded({ extended: true }));
// 루트 경로에서 index.ejs 렌더링 app.get('/', (req, res) => { // SQLite DB에서 데이터 조회 db.get('SELECT * FROM mytable', (err, row) => { if (err) { console.error(err.message); return res.status(500).send('Internal Server Error'); }
// index.ejs 렌더링 및 데이터 전달 ejs.renderFile('index.ejs', { title: row.title, description: row.description, author: row.author }, (err, renderedHtml) => { if (err) { console.error(err.message); return res.status(500).send('Internal Server Error'); } res.send(renderedHtml); }); }); });
// CMS 페이지 렌더링 app.get('/cms', (req, res) => { ejs.renderFile('cms.html', (err, renderedHtml) => { if (err) { console.error(err.message); return res.status(500).send('Internal Server Error'); } res.send(renderedHtml); }); });
// 데이터 입력 처리 app.post('/input', (req, res) => { const title = req.body.title; const description = req.body.description; const author = req.body.author;
// 데이터 삽입 db.run('INSERT INTO mytable (title, description, author) VALUES (?, ?, ?)', [title, description, author], (err) => { if (err) { console.error(err.message); return res.status(500).send('Internal Server Error'); } console.log('Data inserted successfully.'); res.redirect('/'); }); });
// 서버 시작 const port = 3000; app.listen(port, () => { console.log(`Server is running on http://localhost:${port}`); });
위의 코드를 실행하고 http://localhost:3000/cms에 접속하면 데이터 입력 페이지인 cms.html이 나타납니다. 사용자가 데이터를 입력하고 저장하면 SQLite 데이터베이스에 저장되고, 메인 페이지(http://localhost:3000/)에서 변경된 데이터를 확인할 수 있습니다.