프로젝트

일반

사용자정보

통계
| 개정판:

root / HServer / 00.Server / app.js @ 37

이력 | 보기 | 이력해설 | 다운로드 (5.47 KB)

1 37 HKM
var express = require('express');
2
var http = require('http');
3
var static = require('serve-static');
4
var path = require('path');
5
6
var bodyParser = require('body-parser');
7
var cookieParser = require('cookie-parser');
8
var expressSession = require('express-session');
9
10
var expressErrorHandler = require('express-error-handler');
11
12
// 파일 읽기 쓰기
13
var multer = require('multer');
14
var fs = require('fs');
15
16
// 다중 서버 접속 지원
17
var cors = require('cors');
18
19
var database;
20
var UserSchema;
21
var UserModel;
22
23
// mongoose 접속과 schema 에 관련된 내용이 있다.
24
var dbCenter = require('./dbCenter');
25
var agent = require('./routers/agent');
26
//////////////////////////////////////////////////////////////////
27
var app = express();
28
29
app.use('/dbCenter', dbCenter.default);
30
31
app.use('/agent', agent.default );
32
33
app.set('port', process.env.PORT || 3000);
34
35
// public 폴더 오픈
36
app.use('/public', static(path.join(__dirname,'public')));
37
38
// upload 폴더 오픈
39
app.use('/uploads', static(path.join(__dirname, 'uploads')));
40
41
app.use(bodyParser.urlencoded({ extended: true }));
42
//app.use(bodyParser.urlencoded({extended:false}));
43
app.use(bodyParser.json());
44
45
app.use(cookieParser());
46
app.use(expressSession({
47
    secret:'my key',
48
    resave:true,
49
    saveUninitialized:true
50
}));
51
52
// 클라이언트에서 ajax로 요청했을 때 cors(다중 서버 접속)지원
53
app.use(cors());
54
55
// multer 미들웨어 사용 : 미들웨어 사용 순서 중요 body-parser -> multer -> router
56
// 파일 제한 10개 , 1G
57
var storage = multer.diskStorage({
58
   destination: function(req, file, callback){
59
       // uploads 폴더로 destination 을 정해준다.
60
       callback(null, 'uploads');
61
   },
62
    filename: function (req, file, callback){
63
        //callback(null, file.originalname + Date.now() + '.png')
64
65
        var extension = path.extname(file.originalname);
66
        var basename = path.basename(file.originalname, extension);
67
68
        callback(null, basename + Date.now() + extension);
69
    }
70
});
71
72
var upload = multer({
73
    storage: storage,
74
    limits: {
75
        // 한번에 업로드 할 수 있는 최대 파일 갯수
76
        files: 10,
77
        // 한버넹 업로드 할 수 있는 최대 파일 용량
78
        rileSize: 1024*1024*1024
79
    }
80
});
81
82
// 이 코드 아래로 부터 라우터 등록
83
var router = express.Router();
84
85
// ▼ DB 접속 관련 함수 ▼////////////////////////////////////////////////////////////////////
86
// ▲ DB 접속 관련 함수 ▲////////////////////////////////////////////////////////////////////
87
88
89
90
// DB Create 요청
91
router.route('/DB/Create').post(function(req, res){
92
    console.log('/DB/Create : call');
93
    dbCenter.createDB(req.body, function(err){
94
       if( err ){
95
           var resultString = err.toString();
96
           console.log(resultString);
97
           res.send({'result':resultString});
98
           res.end();
99
       } else {
100
           console.log('DB/Create : Success');
101
           res.send({'result':resultString});
102
           res.end();
103
       }
104
   });
105
});
106
107
108
109
// ▼ 클라이언트에 대한 것들 ▼////////////////////////////////////////////////////////////////////
110
// 연결된 모든 클라이언트를 가져올 것이다.
111
router.route('/clients').post(function(req, res){
112
     dbCenter.data_All(function(err, users){
113
         if(err){
114
115
         } else {
116
             res.send(users);
117
             res.end();
118
         }
119
     });
120
});
121
122
// Client 에서 udp를 받게되면 post로 쏴준다.
123
router.route('/clients/attendance').post(function(req, res){
124
    //console.dir(req);
125
    dbCenter.data_Set(req, function(err){
126
        if(err){
127
            res.json({"result":'fail'});
128
            res.end();
129
        } else {
130
            // 페이지에 새로고침을 요청하는 명령어를 날린다.
131
            io.emit('test');
132
133
            res.json({"result":'success'});
134
            res.end();
135
        }
136
    });
137
});
138
// ▲ 클라이언트에 대한 것들 ▲////////////////////////////////////////////////////////////////////
139
140
app.use('/',router);
141
142
var errorHandler = expressErrorHandler({
143
    static: {
144
        '404':'./public/404.html'
145
    }
146
});
147
148
app.use(expressErrorHandler.httpError(404));
149
app.use(errorHandler);
150
151
152
var udpMulticast = require('./udpMulticast');
153
154
// 비동기 함수로 udp 멀티캐스트 주기적으로 전송
155
// ms 단위로 재 전송 시간 설정
156
var reSendTime = 1000;
157
158
let asyncUdpSend = (massage)=> new Promise((resolve)=>{
159
   setTimeout(()=>{
160
       console.log(massage);
161
       udpMulticast.send();
162
       resolve(asyncUdpSend(massage));
163
   }, reSendTime) ;
164
});
165
166
async function asyncMain(){
167
    asyncUdpSend('upd send');
168
};
169
170
// http 웹 서버를 실행 합니다.
171
var server = http.createServer(app).listen(app.get('port'), function(){
172
    console.log('웹 서버가 실행 되었습니다. ( 포트 : ' + app.get('port') + ')');
173
174
    // dbCenter.db_Connect(function(err){
175
    //     if(err){
176
177
    //     } else {
178
179
    //     }
180
    // });
181
});
182
183
184
// socket.io 사용
185
var io = require('socket.io')(server);
186
187
var connectPage;
188
189
io.on('connection', function(client){
190
    console.log('없는 장치를 검색하는 페이지에 접근함.');
191
    connectPage = client;
192
    //client.emit('test',);
193
194
    io.emit('test');
195
    //client.on('event', function(data){});
196
    //client.on('disconnect', function(){});
197
});
198
199