hrz_sv / 00.Server / app.js @ 37
이력 | 보기 | 이력해설 | 다운로드 (5.47 KB)
1 |
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 |
|
200 |
|