Mingyu

Database Change to MongoDB

...@@ -17,6 +17,10 @@ var router = express.Router(); ...@@ -17,6 +17,10 @@ var router = express.Router();
17 var cookieParser = require('cookie-parser') 17 var cookieParser = require('cookie-parser')
18 var ExpressSession = require('express-session') 18 var ExpressSession = require('express-session')
19 19
20 +var database = require('./database/database');
21 +var config = require('./config');
22 +
23 +
20 // get port 24 // get port
21 var port = process.env.PORT || 3000; 25 var port = process.env.PORT || 3000;
22 app.set('port',port); 26 app.set('port',port);
...@@ -64,9 +68,25 @@ app.use(expressErrorHandler.httpError(404)); ...@@ -64,9 +68,25 @@ app.use(expressErrorHandler.httpError(404));
64 app.use(errorHandler); 68 app.use(errorHandler);
65 69
66 70
71 +// 프로세스 종료 시에 데이터베이스 연결 해제
72 +process.on('SIGTERM', function () {
73 + console.log("프로세스가 종료됩니다.");
74 + app.close();
75 +});
76 +
77 +app.on('close', function () {
78 + console.log("Express 서버 객체가 종료됩니다.");
79 + if (database.db) {
80 + database.db.close();
81 + }
82 +});
83 +
67 84
68 // for server listening 85 // for server listening
69 var server = http.createServer(app) 86 var server = http.createServer(app)
70 server.listen(port,function(){ 87 server.listen(port,function(){
71 console.log('익스프레스 서버를 시작했습니다.'); 88 console.log('익스프레스 서버를 시작했습니다.');
89 +
90 + database.init(app, config);
72 }) 91 })
92 +
......
1 +module.exports = {
2 + server_port: 3000,
3 + db_url: 'mongodb://oss:12341234@cluster0.us5lm.mongodb.net/?retryWrites=true&w=majority',
4 + db_schemas: [
5 + {file:'./user_schema', collection:'users3', schemaName:'UserSchema', modelName:'UserModel'}
6 + ]
7 +}
...\ No newline at end of file ...\ No newline at end of file
1 -const mysql = require('mysql')
2 -
3 -var pool = mysql.createPool({
4 - host: "localhost",
5 - user: "root",
6 - password: "1234",
7 - port: 3306,
8 - database: "rest_stop"
9 -})
10 -
11 -var adduser = function(name, id, password, callback) {
12 - console.log('addUser');
13 -
14 - pool.getConnection(function(err, conn) {
15 - if(err){
16 - if(conn){
17 - conn.release();
18 - }
19 -
20 - callback(err, null);
21 - return;
22 - }
23 -
24 - var data = {name:name, id:id, password:password};
25 -
26 - var exec = conn.query('insert into users set ?', data, function(err, result) {
27 - conn.release();
28 -
29 - if(err){
30 - console.log('SQL 실행 시 오류 발생');
31 - console.dir(err);
32 -
33 - callback(err,null);
34 -
35 - return;
36 - }
37 -
38 - callback(null, result);
39 - })
40 - })
41 -}
42 -
43 -var authUser = function(id, password, callback) {
44 - console.log('authUser 호출');
45 -
46 - pool.getConnection(function(err, conn) {
47 - if(err){
48 - if(conn){
49 - conn.release();
50 - }
51 -
52 - callback(err, null);
53 - return;
54 - }
55 -
56 - var colums = ['name', 'id'];
57 - var tablename = 'users';
58 -
59 - var exec = conn.query("select ?? from ?? where id = ? and password = ?",
60 - [colums, tablename, id, password], function(err, rows) {
61 - conn.release();
62 -
63 - if(rows.length >0){
64 - console.log('Id [%s], password [$s] 일치하는 사용자 찾음', id, password);
65 - callback(null, rows);
66 - } else {
67 - console.log('일치하는 사용자 없음');
68 - callback(null, null);
69 - }
70 - }
71 - );
72 - })
73 -}
74 -
75 -module.exports.pool = pool;
76 -module.exports.authUser = authUser;
77 -module.exports.adduser = adduser;
78 -//module.exports.listuser = listuser;
1 -const Connection = require('./Connection')
2 -
3 -var adduser = async (username,userId,userPassword) => {
4 - try {
5 - const query = `INSERT INTO ` +
6 - `accounts ` +
7 - `VALUES ` +
8 - `(null, '$(username)', '$(userId)', '$(userPassword)')`
9 -
10 - await Connection(query)
11 -
12 - return true;
13 - } catch (error) {
14 - return false;
15 - }
16 -};
17 -
18 -var login;
19 -
20 -var listuser = function(req, res) {
21 - console.log('user(user2.js) 모듈 안에 있는 listuser 호출됨.');
22 -
23 - // 데이터베이스 객체 참조
24 - var database = req.app.get('database');
25 -
26 - // 데이터베이스 객체가 초기화된 경우, 모델 객체의 findAll 메소드 호출
27 - if (database.db) {
28 - // 1. 모든 사용자 검색
29 - database.UserModel.findAll(function(err, results) {
30 - // 에러 발생 시, 클라이언트로 에러 전송
31 - if (err) {
32 - console.error('사용자 리스트 조회 중 에러 발생 : ' + err.stack);
33 -
34 - res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
35 - res.write('<h2>사용자 리스트 조회 중 에러 발생</h2>');
36 - res.write('<p>' + err.stack + '</p>');
37 - res.end();
38 -
39 - return;
40 - }
41 -
42 - if (results) {
43 - console.dir(results);
44 -
45 - res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
46 - res.write('<h2>사용자 리스트</h2>');
47 - res.write('<div><ul>');
48 -
49 - for (var i = 0; i < results.length; i++) {
50 - var curId = results[i]._doc.id;
51 - var curName = results[i]._doc.name;
52 - res.write(' <li>#' + i + ' : ' + curId + ', ' + curName + '</li>');
53 - }
54 -
55 - res.write('</ul></div>');
56 - res.end();
57 - } else {
58 - res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
59 - res.write('<h2>사용자 리스트 조회 실패</h2>');
60 - res.end();
61 - }
62 - });
63 - } else {
64 - res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
65 - res.write('<h2>데이터베이스 연결 실패</h2>');
66 - res.end();
67 - }
68 -
69 -};
70 -
71 -
72 -//사용자를 인증하는 함수 : 아이디로 먼저 찾고 비밀번호를 그 다음에 비교하도록 함
73 -var authUser = function(database, id, password, callback) {
74 - console.log('authUser 호출됨.');
75 -
76 - // 1. 아이디를 이용해 검색
77 - database.UserModel.findById(id, function(err, results) {
78 - if (err) {
79 - callback(err, null);
80 - return;
81 - }
82 -
83 - console.log('아이디 [%s]로 사용자 검색결과', id);
84 - console.dir(results);
85 -
86 - if (results.length > 0) {
87 - console.log('아이디와 일치하는 사용자 찾음.');
88 -
89 - // 2. 패스워드 확인 : 모델 인스턴스를 객체를 만들고 authenticate() 메소드 호출
90 - var user = new database.UserModel({id:id});
91 - var authenticated = user.authenticate(password, results[0]._doc.salt, results[0]._doc.hashed_password);
92 - if (authenticated) {
93 - console.log('비밀번호 일치함');
94 - callback(null, results);
95 - } else {
96 - console.log('비밀번호 일치하지 않음');
97 - callback(null, null);
98 - }
99 -
100 - } else {
101 - console.log("아이디와 일치하는 사용자를 찾지 못함.");
102 - callback(null, null);
103 - }
104 -
105 - });
106 -
107 -}
108 -
109 -
110 -//사용자를 등록하는 함수
111 -var addUser = function(database, id, password, name, callback) {
112 - console.log('addUser 호출됨.');
113 -
114 - // UserModel 인스턴스 생성
115 - var user = new database.UserModel({"id":id, "password":password, "name":name});
116 -
117 - // save()로 저장
118 - user.save(function(err) {
119 - if (err) {
120 - callback(err, null);
121 - return;
122 - }
123 -
124 - console.log("사용자 데이터 추가함.");
125 - callback(null, user);
126 -
127 - });
128 -}
129 -
130 -
131 -module.exports.login = login;
132 -module.exports.adduser = adduser;
133 -module.exports.listuser = listuser;
134 -
1 +var mongoose = require('mongoose');
2 +var db_url = 'mongodb+srv://oss:12341234@cluster0.us5lm.mongodb.net/?retryWrites=true&w=majority';
3 +// database 객체에 db, schema, model 모두 추가
4 +var database = {};
5 +
6 +// 초기화를 위해 호출하는 함수
7 +database.init = function(app, config) {
8 + console.log('init() 호출됨.');
9 +
10 + connect(app, config);
11 +}
12 +
13 +//데이터베이스에 연결하고 응답 객체의 속성으로 db 객체 추가
14 +function connect(app, config) {
15 + console.log('connect() 호출됨.');
16 +
17 + // 데이터베이스 연결 : config의 설정 사용
18 + mongoose.Promise = global.Promise; // mongoose의 Promise 객체는 global의 Promise 객체 사용하도록 함
19 + mongoose.connect(db_url);
20 +
21 + database.db = mongoose.connection;
22 +
23 + database.db.on('error', console.error.bind(console, 'mongoose connection error.'));
24 + database.db.on('open', function () {
25 + console.log('데이터베이스에 연결되었습니다. : ' + db_url);
26 +
27 + // config에 등록된 스키마 및 모델 객체 생성
28 + createSchema(app, config);
29 +
30 + });
31 + database.db.on('disconnected', connect);
32 +
33 +}
34 +
35 +// config에 정의된 스키마 및 모델 객체 생성
36 +function createSchema(app, config) {
37 + var schemaLen = config.db_schemas.length;
38 + console.log('설정에 정의된 스키마의 수 : %d', schemaLen);
39 +
40 + for (var i = 0; i < schemaLen; i++) {
41 + var curItem = config.db_schemas[i];
42 +
43 + // 모듈 파일에서 모듈 불러온 후 createSchema() 함수 호출하기
44 + var curSchema = require(curItem.file).createSchema(mongoose);
45 + console.log('%s 모듈을 불러들인 후 스키마 정의함.', curItem.file);
46 +
47 + // User 모델 정의
48 + var curModel = mongoose.model(curItem.collection, curSchema);
49 + console.log('%s 컬렉션을 위해 모델 정의함.', curItem.collection);
50 +
51 + // database 객체에 속성으로 추가
52 + database[curItem.schemaName] = curSchema;
53 + database[curItem.modelName] = curModel;
54 + console.log('스키마 이름 [%s], 모델 이름 [%s] 이 database 객체의 속성으로 추가됨.', curItem.schemaName, curItem.modelName);
55 + }
56 +
57 + app.set('database', database);
58 + console.log('database 객체가 app 객체의 속성으로 추가됨.');
59 +}
60 +
61 +
62 +// database 객체를 module.exports에 할당
63 +module.exports = database;
...\ No newline at end of file ...\ No newline at end of file
1 +var crypto = require('crypto');
2 +
3 +var Schema = {};
4 +
5 +Schema.createSchema = function(mongoose) {
6 +
7 + // 스키마 정의
8 + var UserSchema = mongoose.Schema({
9 + id: {type: String, required: true, unique: true, 'default':''},
10 + hashed_password: {type: String, required: true, 'default':''},
11 + salt: {type:String, required:true},
12 + name: {type: String, index: 'hashed', 'default':''},
13 + age: {type: Number, 'default': -1},
14 + created_at: {type: Date, index: {unique: false}, 'default': Date.now},
15 + updated_at: {type: Date, index: {unique: false}, 'default': Date.now}
16 + });
17 +
18 + // password를 virtual 메소드로 정의 : MongoDB에 저장되지 않는 편리한 속성임. 특정 속성을 지정하고 set, get 메소드를 정의함
19 + UserSchema
20 + .virtual('password')
21 + .set(function(password) {
22 + this._password = password;
23 + this.salt = this.makeSalt();
24 + this.hashed_password = this.encryptPassword(password);
25 + console.log('virtual password 호출됨 : ' + this.hashed_password);
26 + })
27 + .get(function() { return this._password });
28 +
29 + // 스키마에 모델 인스턴스에서 사용할 수 있는 메소드 추가
30 + // 비밀번호 암호화 메소드
31 + UserSchema.method('encryptPassword', function(plainText, inSalt) {
32 + if (inSalt) {
33 + return crypto.createHmac('sha1', inSalt).update(plainText).digest('hex');
34 + } else {
35 + return crypto.createHmac('sha1', this.salt).update(plainText).digest('hex');
36 + }
37 + });
38 +
39 + // salt 값 만들기 메소드
40 + UserSchema.method('makeSalt', function() {
41 + return Math.round((new Date().valueOf() * Math.random())) + '';
42 + });
43 +
44 + // 인증 메소드 - 입력된 비밀번호와 비교 (true/false 리턴)
45 + UserSchema.method('authenticate', function(plainText, inSalt, hashed_password) {
46 + if (inSalt) {
47 + console.log('authenticate 호출됨 : %s -> %s : %s', plainText, this.encryptPassword(plainText, inSalt), hashed_password);
48 + return this.encryptPassword(plainText, inSalt) === hashed_password;
49 + } else {
50 + console.log('authenticate 호출됨 : %s -> %s : %s', plainText, this.encryptPassword(plainText), this.hashed_password);
51 + return this.encryptPassword(plainText) === this.hashed_password;
52 + }
53 + });
54 +
55 + // 값이 유효한지 확인하는 함수 정의
56 + var validatePresenceOf = function(value) {
57 + return value && value.length;
58 + };
59 +
60 + // 저장 시의 트리거 함수 정의 (password 필드가 유효하지 않으면 에러 발생)
61 + UserSchema.pre('save', function(next) {
62 + if (!this.isNew) return next();
63 +
64 + if (!validatePresenceOf(this.password)) {
65 + next(new Error('유효하지 않은 password 필드입니다.'));
66 + } else {
67 + next();
68 + }
69 + })
70 +
71 + // 필수 속성에 대한 유효성 확인 (길이값 체크)
72 + UserSchema.path('id').validate(function (id) {
73 + return id.length;
74 + }, 'id 칼럼의 값이 없습니다.');
75 +
76 + UserSchema.path('name').validate(function (name) {
77 + return name.length;
78 + }, 'name 칼럼의 값이 없습니다.');
79 +
80 + UserSchema.path('hashed_password').validate(function (hashed_password) {
81 + return hashed_password.length;
82 + }, 'hashed_password 칼럼의 값이 없습니다.');
83 +
84 +
85 + // 스키마에 static 메소드 추가
86 + UserSchema.static('findById', function(id, callback) {
87 + return this.find({id:id}, callback);
88 + });
89 +
90 + UserSchema.static('findAll', function(callback) {
91 + return this.find({}, callback);
92 + });
93 +
94 + console.log('UserSchema 정의함.');
95 +
96 + return UserSchema;
97 +};
98 +
99 +// module.exports에 UserSchema 객체 직접 할당
100 +module.exports = Schema;
101 +
1 +var Conn = require('../database/database')
1 var express = require('express') 2 var express = require('express')
2 -var Conn = require('../database/Connection') 3 +var router = express.Router();
3 -var router = express.Router()
4 4
5 //라우팅 함수 등록 5 //라우팅 함수 등록
6 6
7 router.get('/',function(req,res){ 7 router.get('/',function(req,res){
8 +
8 res.render('login.html') 9 res.render('login.html')
9 }); 10 });
10 11
...@@ -15,45 +16,90 @@ router.post('/process', function(req, res) { ...@@ -15,45 +16,90 @@ router.post('/process', function(req, res) {
15 var paramPassword = req.body.password || req.query.password; 16 var paramPassword = req.body.password || req.query.password;
16 //GET, POST 모두 고려해서 둘 다 검사 17 //GET, POST 모두 고려해서 둘 다 검사
17 18
18 - if(Conn.pool){ 19 + // 데이터베이스 객체 참조
19 - Conn.authUser(paramId, paramPassword, function(err, rows) { 20 + var database = req.app.get('database');
20 - if(err){ 21 +
21 - console.error(err.stack); 22 + // 데이터베이스 객체가 초기화된 경우, authUser 함수 호출하여 사용자 인증
22 - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); 23 + if (database.db) {
23 - res.write('<h1>로그인 중 오류</h1>'); 24 + authUser(database, paramId, paramPassword, function(err, docs) {
24 - res.write('<div><p>Param id : ' + paramId + '</p></div>'); 25 + // 에러 발생 시, 클라이언트로 에러 전송
25 - res.write('<div><p>Param password : ' + paramPassword + '</p></div>'); 26 + if (err) {
26 - res.write("<br><br><a href ='/login'>로그인 페이지로 돌아가기</a>"); 27 + console.error('사용자 로그인 중 에러 발생 : ' + err.stack);
27 - res.end(); 28 +
28 - 29 + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
29 - return; 30 + res.write('<h2>사용자 로그인 중 에러 발생</h2>');
31 + res.write('<p>' + err.stack + '</p>');
32 + res.end();
33 +
34 + return;
30 } 35 }
31 - if (rows){ 36 +
32 - console.dir(rows); 37 + // 조회된 레코드가 있으면 성공 응답 전송
33 - 38 + if (docs) {
34 - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); 39 + console.dir(docs);
35 - res.write('<h1>로그인 성공</h1>');
36 - res.write('<div><p>Param name : ' + rows[0].name + '</p></div>');
37 - res.write('<div><p>Param id : ' + paramId + '</p></div>');
38 - res.write("<br><br><a href ='/login'>로그인 페이지로 돌아가기</a>");
39 - res.end();
40 - } else {
41 - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' });
42 - res.write('<h1>로그인 실패.</h1>');
43 - res.write('<div><p>Param id : ' + paramId + '</p></div>');
44 - res.write("<br><br><a href ='/login'>로그인 페이지로 돌아가기</a>");
45 - res.end();
46 - }
47 -
48 - })
49 - }else{
50 - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' });
51 - res.write('<h1>데이터베이스 연결 실패</h1>');
52 - res.end();
53 - }
54 40
41 + // 조회 결과에서 사용자 이름 확인
42 + var username = docs[0].name;
43 +
44 + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
45 + res.write('<h1>로그인 성공</h1>');
46 + res.write('<div><p>사용자 아이디 : ' + paramId + '</p></div>');
47 + res.write('<div><p>사용자 이름 : ' + username + '</p></div>');
48 + res.write("<br><br><a href='/login'>다시 로그인하기</a>");
49 + res.end();
50 +
51 + } else { // 조회된 레코드가 없는 경우 실패 응답 전송
52 + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
53 + res.write('<h1>로그인 실패</h1>');
54 + res.write('<div><p>아이디와 패스워드를 다시 확인하십시오.</p></div>');
55 + res.write("<br><br><a href='/login'>다시 로그인하기</a>");
56 + res.end();
57 + }
58 + });
59 + } else { // 데이터베이스 객체가 초기화되지 않은 경우 실패 응답 전송
60 + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
61 + res.write('<h2>데이터베이스 연결 실패</h2>');
62 + res.write('<div><p>데이터베이스에 연결하지 못했습니다.</p></div>');
63 + res.end();
64 + }
55 65
56 }); 66 });
57 67
68 +//사용자를 인증하는 함수 : 아이디로 먼저 찾고 비밀번호를 그 다음에 비교하도록 함
69 +var authUser = function(database, id, password, callback) {
70 + console.log('authUser 호출됨.');
71 +
72 + // 1. 아이디를 이용해 검색
73 + database.UserModel.findById(id, function(err, results) {
74 + if (err) {
75 + callback(err, null);
76 + return;
77 + }
78 +
79 + console.log('아이디 [%s]로 사용자 검색결과', id);
80 + console.dir(results);
81 +
82 + if (results.length > 0) {
83 + console.log('아이디와 일치하는 사용자 찾음.');
84 +
85 + // 2. 패스워드 확인 : 모델 인스턴스를 객체를 만들고 authenticate() 메소드 호출
86 + var user = new database.UserModel({id:id});
87 + var authenticated = user.authenticate(password, results[0]._doc.salt, results[0]._doc.hashed_password);
88 + if (authenticated) {
89 + console.log('비밀번호 일치함');
90 + callback(null, results);
91 + } else {
92 + console.log('비밀번호 일치하지 않음');
93 + callback(null, null);
94 + }
95 +
96 + } else {
97 + console.log("아이디와 일치하는 사용자를 찾지 못함.");
98 + callback(null, null);
99 + }
100 +
101 + });
102 +
103 +}
58 104
59 module.exports = router 105 module.exports = router
...\ No newline at end of file ...\ No newline at end of file
......
1 var express = require('express') 1 var express = require('express')
2 -var Conn = require('../database/Connection') 2 +var Conn = require('../database/database')
3 var router = express.Router() 3 var router = express.Router()
4 4
5 router.get('/',function(req,res){ 5 router.get('/',function(req,res){
...@@ -15,47 +15,66 @@ router.post('/process', function(req, res) { ...@@ -15,47 +15,66 @@ router.post('/process', function(req, res) {
15 var paramPassword = req.body.password || req.query.password; 15 var paramPassword = req.body.password || req.query.password;
16 //GET, POST 모두 고려해서 둘 다 검사 16 //GET, POST 모두 고려해서 둘 다 검사
17 17
18 - if(Conn.pool){ 18 + // 데이터베이스 객체 참조
19 - Conn.adduser(paramName, paramId, paramPassword, function(err, addedUser) { 19 + var database = req.app.get('database');
20 - if(err){ 20 +
21 - console.error(err.stack); 21 + // 데이터베이스 객체가 초기화된 경우, addUser 함수 호출하여 사용자 추가
22 - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); 22 + if (database.db) {
23 - res.write('<h1>ID가 중복되었습니다. 다른 ID를 사용해주세요.</h1>'); 23 + addUser(database, paramId, paramPassword, paramName, function(err, addedUser) {
24 - res.write('<div><p>Param name : ' + paramName + '</p></div>'); 24 + // 동일한 id로 추가하려는 경우 에러 발생 - 클라이언트로 에러 전송
25 - res.write('<div><p>Param id : ' + paramId + '</p></div>'); 25 + if (err) {
26 - res.write('<div><p>Param password : ' + paramPassword + '</p></div>'); 26 + console.error('사용자 추가 중 에러 발생 : ' + err.stack);
27 - res.write("<br><br><a href ='/login'>로그인 페이지로 돌아가기</a>"); 27 +
28 - res.end(); 28 + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
29 - 29 + res.write('<h2>사용자 추가 중 에러 발생</h2>');
30 - return; 30 + res.write('<p>' + err.stack + '</p>');
31 + res.end();
32 +
33 + return;
31 } 34 }
32 - if (addedUser){ 35 +
33 - console.dir(addedUser); 36 + // 결과 객체 있으면 성공 응답 전송
34 - 37 + if (addedUser) {
35 - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); 38 + console.dir(addedUser);
36 - res.write('<h1>회원가입 성공</h1>'); 39 +
37 - res.write('<div><p>Param name : ' + paramName + '</p></div>'); 40 + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
38 - res.write('<div><p>Param id : ' + paramId + '</p></div>'); 41 + res.write('<h2>사용자 추가 성공</h2>');
39 - res.write('<div><p>Param password : ' + paramPassword + '</p></div>'); 42 + res.write("<br><br><a href='/login'>다시 로그인하기</a>");
40 - res.write("<br><br><a href ='/login'>로그인 페이지로 돌아가기</a>"); 43 + res.end();
41 - res.end(); 44 + } else { // 결과 객체가 없으면 실패 응답 전송
42 - } else { 45 + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
43 - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); 46 + res.write('<h2>사용자 추가 실패</h2>');
44 - res.write('<h1>회원가입 실패.</h1>'); 47 + res.write("<br><br><a href='/signup'>다시 가입하기</a>");
45 - res.write('<div><p>Param id : ' + paramId + '</p></div>'); 48 + res.end();
46 - res.write('<div><p>Param password : ' + paramPassword + '</p></div>'); 49 + }
47 - res.write("<br><br><a href ='/login'>로그인 페이지로 돌아가기</a>"); 50 + });
48 - res.end(); 51 + } else { // 데이터베이스 객체가 초기화되지 않은 경우 실패 응답 전송
49 - } 52 + res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
50 - 53 + res.write('<h2>데이터베이스 연결 실패</h2>');
51 - }) 54 + res.end();
52 - }else{ 55 + }
53 - res.writeHead('200', { 'Content-Type': 'text/html;charset=utf8' }); 56 +
54 - res.write('<h1>데이터베이스 연결 실패</h1>'); 57 +});
55 - res.end();
56 - }
57 58
58 59
59 -}); 60 +//사용자를 등록하는 함수
61 +var addUser = function(database, id, password, name, callback) {
62 + console.log('addUser 호출됨.');
63 +
64 + // UserModel 인스턴스 생성
65 + var user = new database.UserModel({"id":id, "password":password, "name":name});
66 +
67 + // save()로 저장
68 + user.save(function(err) {
69 + if (err) {
70 + callback(err, null);
71 + return;
72 + }
73 +
74 + console.log("사용자 데이터 추가함.");
75 + callback(null, user);
76 +
77 + });
78 +}
60 79
61 module.exports = router 80 module.exports = router
...\ No newline at end of file ...\ No newline at end of file
......
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
...@@ -12,11 +12,13 @@ ...@@ -12,11 +12,13 @@
12 "body-parser": "^1.20.0", 12 "body-parser": "^1.20.0",
13 "bootstrap": "^5.1.3", 13 "bootstrap": "^5.1.3",
14 "cookie-parser": "^1.4.6", 14 "cookie-parser": "^1.4.6",
15 + "crypto": "^1.0.1",
15 "ejs": "^3.1.7", 16 "ejs": "^3.1.7",
16 "express": "^4.18.1", 17 "express": "^4.18.1",
17 "express-error-handler": "^1.1.0", 18 "express-error-handler": "^1.1.0",
18 "express-session": "^1.17.3", 19 "express-session": "^1.17.3",
19 "http": "^0.0.1-security", 20 "http": "^0.0.1-security",
21 + "mongoose": "^6.3.4",
20 "mysql": "^2.18.1", 22 "mysql": "^2.18.1",
21 "path": "^0.12.7", 23 "path": "^0.12.7",
22 "serve-static": "^1.15.0" 24 "serve-static": "^1.15.0"
......