우선 VS code에 프로젝트 구조를 아래와 같이 설계했다. 그리고 필요한 프로그램들을 express, multer, mongodb, mongoose, ejs, env, nodemon 등을 설치했다.
(env 파일은 비공개 파일로 주로 민감한 정보를 저장하는데 쓴다).
//.env 파일에 포트와 DB_URI 정보를 입력한다.
PORT = 5000
DB_URI = mongodb://localhost:27017/photo_album
main.js에 서버를 세팅하고 파일업로드, DB 연결, ejs 템플릿 셋업을 한다.nodes 에서는 require () 을 사용해서 설치해둔 프로그램들을 import 한다.
// main.js 서버 파일
// imports
var require
require('dotenv').config();
const express = require('express');
const mongoose = require('mongoose');
const session = require('express-session');
const app = express();
const PORT = process.env.PORT || 4000;
app.listen(PORT, ()=> {
console.log(`server started at http://localhost:${PORT}`);
});
.connect () 를 사용해서 env 파일에 저장해둔 내 DB_URI를 연결해준다. db가 성공적으로 연결되면 console로 성공 메세지를 보내주고, 에러가 생기면 에러 메세지를 보내준다.
//database connection
mongoose.connect(process.env.DB_URI,
{useNewUrlParser: true, useUnifiedTopology: true});
const db = mongoose.connection;
db.on("error", (error)=> console.log(error));
db.once("open", () => console.log("connection success") );
express session을 사용해서 보안을 위해 세션을 암호화 한다 (잘 이해가 안간다,, 유트브 강의 따라 하게 된 작업)
//middlewares
app.use(express.urlencoded({extended: false}));
app.use(express.json());
app.use(session({
secret: 'my secret key',
saveUninitialized: true,
resave: false,
})
);
app.use((req,res,next)=> {
res.locals.message= req.session.message;
delete req.session.message;
next();
});
ejs 는 html에 다이나믹한 컨텐츠를 엠베드 시켜준다.db에 저장한 파일을 애플리케이션에 불러올때 필요하다.
//set template engine
app.set('view engine', 'ejs');