프로젝트

일반

사용자정보

통계
| 개정판:

root / HServer / CMS / app.js @ 24

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

1 24 HKM
2
/* TODO LIST
3
1. UDP 부분
4
    1) UDP 에서 연결된 장치 전체에 신호 던져주기.
5
    2) 던져 주는 신호 등록해 둬서 서버에서 언제든지 호출 할 수 있게 해주기.
6
    3) 주기적으로 던져주기.
7
    4) 웹에서는 연결된 것들 다 찾아노는 이벤트 만들어두기
8
    5) 클라에서는 정보 요청 하는 것들 찾아보기
9

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