root / HServer / CMS / app.js @ 24
이력 | 보기 | 이력해설 | 다운로드 (5.67 KB)
1 |
|
---|---|
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 |
|
208 |
|