웹_프론트_백엔드/프론트엔드

2021.03.07

shine94 2021. 4. 2. 15:03

1. 파일 업로드

** /public/write.html

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>파일 업로드</title>
</head>
<body>
    <h2>파일 업로드</h2>
    <form method="post" action="/write" enctype="multipart/form-data">
        <p><label>제목 : <input type="text" name="title"></label></p>
        <p>내용</p>
        <p><textarea cols="50" rows="5" name="content"></textarea></p>
        <p><label>파일 : <input type="file" name="photo"></label></p>
        <p><input type="submit" value="확인"></p>
    </form>
</body>
</html>

 

** 2_multer.js

const express = require('express');
const bodyParser = require('body-parser');
const static = require('serve-static');     // npm i serve-static
const path = require('path');
const logger = require('morgan');           // npm i morgan
const multer = require('multer');           // npm i multer

const port = 3000;

const app = express();
const router = express.Router();

app.use(bodyParser.urlencoded({extended: false}));
app.use('/public', static(path.join(__dirname, 'public')));     // http://localhost:3000/public
app.use('/uploads', static(path.join(__dirname, 'uploads')));   // http://localhost:3000/uploads
app.use(logger('dev'));     // dev, short, common, bombined

const storage = multer.diskStorage({
    destination: (req, file, callback) => {
        callback(null, 'uploads');
    },
    filename: (req, file, callback) => {
        const extension = path.extname(file.originalname);
        const basename = path.basename(file.originalname, extension);
        callback(null, basename + "_" + Date.now() + extension);
        // apple.png
        // apple_32904820394.png
    }
});

const upload = multer({
    storage: storage,
    limits: {
        files: 5,
        fileSize: 1024 * 1024 * 100
    }
});

router.route('/write').post(upload.array('photo', 1), (req, res) => {
    console.log('/write 호출!');
    try {
        const title = req.body.title;
        const content = req.body.content;
        const files = req.files;
        console.dir(req.files[0]);
        const originalname = files[0].originalname;
        const filename = files[0].filename;
        const mimetype = files[0].mimetype;
        const size = files[0].size;

        console.log(`파일정보 : 원본파일명:${originalname}, 파일이름:${filename}, mimetype:${mimetype}, 파일크기 : ${size}`);

        res.writeHead('200', {'content-type':'text/html;charset=utf-8'});
        res.write('<h2>파일 업로드 성공</h2>');
        res.write('<hr>');
        res.write(`<p>제목 : ${title}</p>`);
        res.write(`<p>내용 : ${content}</p>`);
        res.write(`<p>원본파일명 : ${originalname}}</p>`);
        res.write(`<p>파일명 : ${filename}</p>`);
        res.write(`<p>mimetype : ${mimetype}</p>`);
        res.write(`<p>파일크기 : ${size}</p>`);
        res.write(`<p><img src='/uploads/${filename}' width='200'><\p>`);
        res.end();
    } catch(e) {
        console.log(e);
    }
});

app.use("/", router);

app.listen(port, () => {
    console.log(`${port}포트로 서버 동작중...`);
});

 

** 아래의 에러는 uploads 폴더가 없기 때문에 생긴 에러

 

** uploads 폴더 생성

 

** 정상적으로 파일 업로드 성공...!

 

 

2. mysql 모듈

 : mysql과 연결하기 위한 모듈이다.
   mysql 모듈은 커넥션 풀을 사용하여 연결한다.
   데이터베이스 연결 객체가 너무 많이 만들어지는 것을 막고 한번 만든 연결을 재활용할 수 있습니다.

 

** mysql 연결 설정

   connectionLimit : 커넥션 풀에서 만들 수 있는 최대 연결 개수를 설정한다.
   host : 연결할 호스트 이름을 설정한다.
   port : 데이터베이스가 사용하는 포트번호를 설정한다.
   user : 데이터베이스 사용자 아이디를 설정한다.
   password : 데이터베이스 사용자 비밀번호를 설정한다.
   database : 데이터베이스 이름을 설정한다.
   debug : 데이터베이스 처리 과정을 로그로 남길지 여부를 설정한다.

 

 

3. mysql에서 여러가지 암호화를 지원

** 이번 수업시간에서는 아주 간단한 단방향 암호화 실습(단방향 암호화? 암호화는 가능하나 복호화가 불가능)
   대신에 같은 글자를 암호화하면 똑같은 글자가 된다.

 

** 홈페이지의 비밀번호를 찾을 때, 알려주는 곳도 있으나 재설정을 하라는 곳도 있다.
   재설정하라는 곳은 단방향 암호화로 비밀번호를 알 수 없다!

** 암호화는 많은 시간이 주어지면 그 어떤 복잡한 암호화도 뚫을 수 있기 때문에
   암호화는 복잡하게 한다기 보다는 시도를 제한하는 것이 좋은 방법이다.


** 가장 단순한 암호 기법 sha1

 

 

4. 1_mysql.js, 회원가입

const express = require('express');
const bodyparser = require('body-parser');
const mysql = require('mysql');         // npm i mysql
const logger = require('morgan');

const app = express();
const port = 3000;
const router = express.Router();

app.use(bodyparser.urlencoded({extended:false}));
app.use(logger('dev'));

const pool = mysql.createPool({
    connectionLimit: 10,
    host: 'localhost',
    user: 'root',
    password: '1234',
    database: 'frontenddb',
    debug: false
});

// http://localhost:3000/member/regist (post)
router.route('/member/regist').post((req, res) => {
    const userid = req.body.userid;
    const pass = req.body.pass;
    const name = req.body.name;
    const age = req.body.age;

    console.log(`userid:${userid}, pass:${pass}, name:${name}, age:${age}`);

    if(pool) {
        joinMember(userid, pass, name, age, (err, result) => {
            if(!err){
                if(result) {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>회원가입 성공</h2>');
                    res.end();
                } else {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>회원가입 실패</h2>');
                    res.end();
                }
            } else {
                console.log(err);
            }
        });
    } else {
        res.writeHead('200', {'content-type':'text/html;charset=utf8'});
        res.write('<h2>데이터베이스 연결실패</h2>');
        res.end();
    }
});


const joinMember = function(userid, pass, name, age, callback) {
    console.log('joinMember 호출!');

    pool.getConnection((err, conn) => {
        if(!err) {
            console.log('데이터베이스 연결 성공');
            const sql = conn.query('insert into tb_simplemember (sm_userid, sm_pass, sm_name, sm_age) values (?, sha1(?), ?, ?)', [userid, pass, name, age], (err, result) => {
                conn.release();
                console.log('sql 실행 완료!');
                if(!err) {
                    console.log('가입완료');
                    callback(null, result);
                    return;
                } else {
                    callback(err, null);
                }
            });
        }
    });
}


app.use('/', router);

app.listen(port, () => {
    console.log(`${port}번 포트로 서버 실행중...`);
})

 

 

 

5. 1_mysql.js, 로그인

const express = require('express');
const bodyparser = require('body-parser');
const mysql = require('mysql');         // npm i mysql
const logger = require('morgan');

const app = express();
const port = 3000;
const router = express.Router();

app.use(bodyparser.urlencoded({extended:false}));
app.use(logger('dev'));

const pool = mysql.createPool({
    connectionLimit: 10,
    host: 'localhost',
    user: 'root',
    password: '1234',
    database: 'frontenddb',
    debug: false
});

// http://localhost:3000/member/regist (post)
router.route('/member/regist').post((req, res) => {
    const userid = req.body.userid;
    const pass = req.body.pass;
    const name = req.body.name;
    const age = req.body.age;

    console.log(`userid:${userid}, pass:${pass}, name:${name}, age:${age}`);

    if(pool){
        joinMember(userid, pass, name, age, (err, result) => {
            if(!err) {
                if(result) {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>회원가입 성공</h2>');
                    res.end();
                } else {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>회원가입 실패</h2>');
                    res.end();
                }
            } else {
                console.log(err);
            }
        });
    }else{
        res.writeHead('200', {'content-type':'text/html;charset=utf8'});
        res.write('<h2>데이터베이스 연결실패</h2>');
        res.end();
    }
});

// http://localhost:3000/member/login (post)
router.route('/member/login').post((req, res) => {
    const userid = req.body.userid;
    const pass = req.body.pass;

    console.log(`userid:${userid}, pass:${pass}`);

    if(pool) {
        loginMember(userid, pass, (err, result) => {
            if(!err) {
                if(result) {
                    console.dir(result);
                    const name = result[0].sm_name;
                    const age = result[0].sm_age;

                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>로그인 성공</h2>');
                    res.write(`<p>아이디 : ${userid}</p>`);
                    res.write(`<p>이름 : ${name}</p>`);
                    res.write(`<p>나이 : ${age}</p>`);
                    res.end();
                } else {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>로그인 실패</h2>');
                    res.end();
                }
            } else {
                console.log(err);
            }
        });
    } else {
        res.writeHead('200', {'content-type':'text/html;charset=utf8'});
        res.write('<h2>데이터베이스 연결실패</h2>');
        res.end();
    }
});


// --------------------------------------------------------------------------

const joinMember = function(userid, pass, name, age, callback) {
    console.log('joinMember 호출!');

    pool.getConnection((err, conn) => {
        if(!err) {
            console.log('데이터베이스 연결 성공');
            const sql = conn.query('insert into tb_simplemember (sm_userid, sm_pass, sm_name, sm_age) values (?, sha1(?), ?, ?)', [userid, pass, name, age], (err, result) => {
                conn.release();
                console.log('sql 실행 완료!');
                if(!err) {
                    console.log('가입완료');
                    callback(null, result);
                    return;
                } else {
                    callback(err, null);
                }
            });
        }
    });
}

const loginMember = function(userid, pass, callback) {
    console.log('loginMember 호출!');

    pool.getConnection((err, conn) => {
        if(!err) {
            const sql = conn.query('select sm_idx, sm_name, sm_age from tb_simplemember where sm_userid=? and sm_pass=sha1(?)', [userid, pass], (err, result) => {
                conn.release();
                console.log('sql 실행 완료!');
                if(!err) {
                    if(result.length > 0) {
                        console.log('일치하는 사용자를 찾음');
                        callback(null, result);
                    } else {
                        console.log('일치하는 사용자가 없음');
                        callback(null, null);
                    }
                    return;
                } else {
                    callback(err, null);
                }
            });
        } else {
            console.log(err);
        }
    });
}


app.use('/', router);

app.listen(port, () => {
    console.log(`${port}번 포트로 서버 실행중...`);
})

 

 

 

6. mongoose 모듈
 : 몽고디비를 사용하면 하나의 컬렉션 안에 똑같은 속성을 가진 문서 객체를 반복적으로 넣어둔다면
   데이터를 조회할때도 어던 속성들이 있는지 미리 알고 있는 상태에서 조회할 수 있다.
   관계형 데이터베이스처럼 테이블이나 엑셀시트와 같이 쉽게 데이터를 다룰 수 있도록 제공한다.

** 메소드

   connect() : mongoose를 사용해 데이터베이스를 연결한다.
   model() : 모델을 정의한다.
   Schema() : 스키마를 정의하는 생성자이다.

 

 

7. 2_mongoose.js, 회원가입

const express = require('express');
const bodyparser = require('body-parser');
const logger = require('morgan');
const mongoose = require('mongoose');       // npm i mongoose

const app = express();
const port = 3000;
const router = express.Router();

app.use(bodyparser.urlencoded({extended:false}));
app.use(logger('dev'));

// 데이터베이스 연결
let database;
let UserSchema;
let UserModel;

function connectDB() {
    const url = "mongodb://localhost:27017/frontenddb";
    console.log('데이터베이스 연결 시도중...');

    mongoose.Promise = global.Promise;      // 몽구스의 프로미스 객체를 global의 프로미스 객체로 사용
    mongoose.connect(url, {useNewUrlParser: true, useUnifiedTopology: true});
    database = mongoose.connection;
    database.on('error', console.error.bind(console, "mongoose 연결 실패!"));
    database.on('open', () => {
        console.log('데이터베이스 연결 성공!');
        UserSchema = mongoose.Schema({
            userid: String,
            userpw: String,
            name: String,
            gender: String
        });
        console.log('UserSchema 생성 완료!');

        UserModel = mongoose.model('user', UserSchema);
        console.log('UserModel이 정의되었습니다.');
    });
}

// http://localhost:3000/user/regist (post)
router.route('/user/regist').post((req, res) => {
    console.log('/user/regist 호출!');
    const userid = req.body.userid;
    const userpw = req.body.userpw;
    const name = req.body.username;
    const gender = req.body.gender;

    console.log(`userid:${userid}, userpw:${userpw}, name:${name}, gender:${gender}`);

    if(database) {
        joinUser(database, userid, userpw, name, gender, (err, result) => {
            if(!err) {
                if(result) {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>회원가입 성공</h2>');
                    res.end();
                } else {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>회원가입 실패</h2>');
                    res.end();
                }
            } else {
                res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                res.write('<h2>서버에러! 회원가입 실패</h2>');
                res.end();
            }
        });
    } else {
        res.writeHead('200', {'content-type':'text/html;charset=utf8'});
        res.write('<h2>데이터베이스 연결실패</h2>');
        res.end();
    }
});


// --------------------------------------------------------------------


const joinUser = function(database, userid, userpw, name, gender, callback) {
    console.log('joinUser 호출!');
    const users = new UserModel({userid:userid, userpw:userpw, name:name, gender:gender});

    users.save((err, result) => {
        if(!err) {
            console.log('회원 document가 추가되었습니다.');
            callback(null, result);
            return;
        }
        callback(err, null);
    });
}


app.use('/', router);

app.listen(port, () => {
    console.log(`${port}번 포트로 서버 실행중...`);
    connectDB();
});

 

 

 

8. 2_mongoose.js, 로그인

const express = require('express');
const bodyparser = require('body-parser');
const logger = require('morgan');
const mongoose = require('mongoose');       // npm i mongoose

const app = express();
const port = 3000;
const router = express.Router();

app.use(bodyparser.urlencoded({extended:false}));
app.use(logger('dev'));

// 데이터베이스 연결
let database;
let UserSchema;
let UserModel;

function connectDB() {
    const url = "mongodb://localhost:27017/frontenddb";
    console.log('데이터베이스 연결 시도중...');

    mongoose.Promise = global.Promise;      // 몽구스의 프로미스 객체를 global의 프로미스 객체로 사용
    mongoose.connect(url, {useNewUrlParser: true, useUnifiedTopology: true});
    database = mongoose.connection;
    database.on('error', console.error.bind(console, "mongoose 연결 실패!"));
    database.on('open', () => {
        console.log('데이터베이스 연결 성공!');
        UserSchema = mongoose.Schema({
            userid: String,
            userpw: String,
            name: String,
            gender: String
        });
        console.log('UserSchema 생성 완료!');

        UserModel = mongoose.model('user', UserSchema);
        console.log('UserModel이 정의되었습니다.');
    });
}

// http://localhost:3000/user/regist (post)
router.route('/user/regist').post((req, res) => {
    console.log('/user/regist 호출!');
    const userid = req.body.userid;
    const userpw = req.body.userpw;
    const name = req.body.username;
    const gender = req.body.gender;

    console.log(`userid:${userid}, userpw:${userpw}, name:${name}, gender:${gender}`);

    if(database) {
        joinUser(database, userid, userpw, name, gender, (err, result) => {
            if(!err) {
                if(result) {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>회원가입 성공</h2>');
                    res.end();
                } else {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>회원가입 실패</h2>');
                    res.end();
                }
            } else {
                res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                res.write('<h2>서버에러! 회원가입 실패</h2>');
                res.end();
            }
        });
    } else {
        res.writeHead('200', {'content-type':'text/html;charset=utf8'});
        res.write('<h2>데이터베이스 연결실패</h2>');
        res.end();
    }
});

// http://localhost:3000/user/login (post)
router.route('/user/login').post((req, res) => {
    console.log('/user/login 호출!');
    const userid = req.body.userid;
    const userpw = req.body.userpw;

    console.log(`userid:${userid}, userpw:${userpw}`);

    if(database) {
        loginUser(database, userid, userpw, (err, result) => {
            if(!err) {
                if(result) {
                    console.dir(result);
                    const name = result[0].name;
                    const gender = result[0].gender;
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>로그인 성공</h2>');
                    res.write(`<p>아이디 : ${userid}</p>`);
                    res.write(`<p>이름 : ${name}</p>`);
                    res.write(`<p>성별 : ${gender}</p>`);
                    res.end();
                } else {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>로그인 실패!</h2>');
                    res.end();
                }
            } else {
                res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                res.write('<h2>서버오류! 로그인 실패!</h2>');
                res.end();
            }
        });
    } else {
        res.writeHead('200', {'content-type':'text/html;charset=utf8'});
        res.write('<h2>데이터베이스 연결실패</h2>');
        res.end();
    }
})


// --------------------------------------------------------------------


const joinUser = function(database, userid, userpw, name, gender, callback) {
    console.log('joinUser 호출!');
    const users = new UserModel({userid:userid, userpw:userpw, name:name, gender:gender});

    users.save((err, result) => {
        if(!err) {
            console.log('회원 document가 추가되었습니다.');
            callback(null, result);
            return;
        }
        callback(err, null);
    });
}

const loginUser = function(database, userid, userpw, callback) {
    console.log('loginUser 호출!');

    UserModel.find({userid:userid, userpw:userpw}, (err, result) => {
        if(!err) {
            if(result.length > 0) {
                console.log('일치하는 사용자를 찾음');
                callback(null, result);
            } else {
                console.log('일치하는 사용자가 없음');
                callback(null, null);
            }
            return;
        }
        callback(err, null);
    });
}


app.use('/', router);

app.listen(port, () => {
    console.log(`${port}번 포트로 서버 실행중...`);
    connectDB();
});

 

 

 

9. 2_mongoose.js, 회원목록

const express = require('express');
const bodyparser = require('body-parser');
const logger = require('morgan');
const mongoose = require('mongoose');       // npm i mongoose

const app = express();
const port = 3000;
const router = express.Router();

app.use(bodyparser.urlencoded({extended:false}));
app.use(logger('dev'));

// 데이터베이스 연결
let database;
let UserSchema;
let UserModel;

function connectDB() {
    const url = "mongodb://localhost:27017/frontenddb";
    console.log('데이터베이스 연결 시도중...');

    mongoose.Promise = global.Promise;      // 몽구스의 프로미스 객체를 global의 프로미스 객체로 사용
    mongoose.connect(url, {useNewUrlParser: true, useUnifiedTopology: true});
    database = mongoose.connection;
    database.on('error', console.error.bind(console, "mongoose 연결 실패!"));
    database.on('open', () => {
        console.log('데이터베이스 연결 성공!');
        UserSchema = mongoose.Schema({
            userid: String,
            userpw: String,
            name: String,
            gender: String
        });
        console.log('UserSchema 생성 완료!');

        // 조건 없이 전부 조회하는 함수 생성
        UserSchema.static('findAll', function(callback) {
            return this.find({}, callback);
        });

        UserModel = mongoose.model('user', UserSchema);
        console.log('UserModel이 정의되었습니다.');
    });
}

// http://localhost:3000/user/regist (post)
router.route('/user/regist').post((req, res) => {
    console.log('/user/regist 호출!');
    const userid = req.body.userid;
    const userpw = req.body.userpw;
    const name = req.body.name;
    const gender = req.body.gender;

    console.log(`userid:${userid}, userpw:${userpw}, name:${name}, gender:${gender}`);

    if(database) {
        joinUser(database, userid, userpw, name, gender, (err, result) => {
            if(!err) {
                if(result) {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>회원가입 성공</h2>');
                    res.end();
                } else {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>회원가입 실패</h2>');
                    res.end();
                }
            } else {
                res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                res.write('<h2>서버에러! 회원가입 실패</h2>');
                res.end();
            }
        });
    } else {
        res.writeHead('200', {'content-type':'text/html;charset=utf8'});
        res.write('<h2>데이터베이스 연결실패</h2>');
        res.end();
    }
});

// http://localhost:3000/user/login (post)
router.route('/user/login').post((req, res) => {
    console.log('/user/login 호출!');
    const userid = req.body.userid;
    const userpw = req.body.userpw;

    console.log(`userid:${userid}, userpw:${userpw}`);

    if(database) {
        loginUser(database, userid, userpw, (err, result) => {
            if(!err) {
                if(result) {
                    console.dir(result);
                    const name = result[0].name;
                    const gender = result[0].gender;
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>로그인 성공</h2>');
                    res.write(`<p>아이디 : ${userid}</p>`);
                    res.write(`<p>이름 : ${name}</p>`);
                    res.write(`<p>성별 : ${gender}</p>`);
                    res.end();
                } else {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>로그인 실패!</h2>');
                    res.end();
                }
            } else {
                res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                res.write('<h2>서버오류! 로그인 실패!</h2>');
                res.end();
            }
        });
    } else {
        res.writeHead('200', {'content-type':'text/html;charset=utf8'});
        res.write('<h2>데이터베이스 연결실패</h2>');
        res.end();
    }
})

// http://localhost:3000/user/list (get)
router.route('/user/list').get((req, res) => {
    if(database) {
        UserModel.findAll((err, result) => {
            if(!err) {
                if(result) {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>회원리스트</h2>');
                    res.write('<div><ul>');
                    for(let i=0; i<result.length; i++) {
                        const userid = result[i].userid;
                        const name = result[i].name;
                        const gender = result[i].gender;

                        res.write(`<li>${i} : ${userid} / ${name} / ${gender}</li>`);
                    }
                    res.write('</div></ul>');
                    res.end();
                } else {
                    res.writeHead('200', {'content-type':'text/html;charset=utf8'});
                    res.write('<h2>회원정보가 없습니다.</h2>');
                    res.end();
                }
            } else {
                console.log('리스트 조회 실패');
            }
        });
    } else {
        res.writeHead('200', {'content-type':'text/html;charset=utf8'});
        res.write('<h2>데이터베이스 연결실패</h2>');
        res.end();
    }
});


// --------------------------------------------------------------------


const joinUser = function(database, userid, userpw, name, gender, callback) {
    console.log('joinUser 호출!');
    const users = new UserModel({userid:userid, userpw:userpw, name:name, gender:gender});

    users.save((err, result) => {
        if(!err) {
            console.log('회원 document가 추가되었습니다.');
            callback(null, result);
            return;
        }
        callback(err, null);
    });
}

const loginUser = function(database, userid, userpw, callback) {
    console.log('loginUser 호출!');

    UserModel.find({userid:userid, userpw:userpw}, (err, result) => {
        if(!err) {
            if(result.length > 0) {
                console.log('일치하는 사용자를 찾음');
                callback(null, result);
            } else {
                console.log('일치하는 사용자가 없음');
                callback(null, null);
            }
            return;
        }
        callback(err, null);
    });
}


app.use('/', router);

app.listen(port, () => {
    console.log(`${port}번 포트로 서버 실행중...`);
    connectDB();
});

 

'웹_프론트_백엔드 > 프론트엔드' 카테고리의 다른 글

2021.03.14  (0) 2021.04.18
2021.03.13  (0) 2021.04.17
2021.03.06  (0) 2021.03.14
2021.02.28  (0) 2021.03.01
2021.02.27  (0) 2021.02.27