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 |