-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
115 lines (95 loc) · 3.64 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
const express = require('express')
const mongoose = require('mongoose')
const fs= require('fs')
var util = require('./util');
const bodyParser = require("body-parser"); //body-parser를 express에 붙여서 사용하기 위해 코드를 추가
//인증모듈 require
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const Session = require('express-session');
var MongoDBStore = require('connect-mongodb-session')(Session);
const flash = require('connect-flash');
// 추가
const PORT= process.env.PORT || 3000;
// routes 추가
const memberRoute = require("./routes/member");
const articleRouter = require('./routes/articles')
const Article = require('./models/article')
const User = require('./models/article');
const { session } = require('passport');
const app = express()
//body-parser를 express에 붙여서 사용하기 위해 코드를 추가
app.use(bodyParser.urlencoded({extended: true}));
//passport를 require 하고, 로그인에 성공할 시 정보를 세션에 저장하는 코드와 인증 후에 페이지 이동등의 요청이 있을 때마다 호출하는 코드를 추가
app.use(flash());
app.use(Session({
secret:'jaeyoung0509', //세션 암호화 key
resave:false,//세션 재저장 여부
saveUninitialized:true,
rolling:false,//로그인 상태에서 페이지 이동 시마다 세션값 변경 여부
cookie:{maxAge:1000*60*60},//유효시간
store: store
}));
// DB연결
mongoose.connect('mongodb://developer:[email protected]:27017/article_service' ,{
useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false})
app.set('view engine' , 'ejs')
//app.use(express.unlencoded({ extended : false }))
//세션
var store = new MongoDBStore({//세션을 저장할 공간
uri: 'mongodb://developer:[email protected]:27017/article_service', //db url
collection: 'Member'//콜렉션 이름
});
store.on('error', function(error) {//에러처리
console.log(error);
});
app.use(passport.initialize());
app.use(passport.session());
//index
app.get('/', async (req, res) => {
var searchQuery = createSearchQuery(req.query);
// await req.session.displayname
if(req.session.passport != null){
const articles = await Article.find(searchQuery).sort({ upload_day: 'desc' })
console.log(1)
email = await req.session.passport.user.email
console.log(email)
res.render('articles/index', { email :email, passport : req.session.passport , articles: articles })
}
else {
const articles = await Article.find(searchQuery).sort({ upload_day: 'desc' })
var email = null
console.log(email)
console.log(2)
res.render('articles/index', { email : null , articles: articles })
}
})
app.get('/imgs', function(req ,res) {
const readFile = fs.readFile;
readFile('main2.gif' ,function(error , data){
res.writeHead(200 , {'Content-Type' : 'text/tml'});
res.end(data);
});
});
// searchQuery <<<
function createSearchQuery(queries){ // 4
var searchQuery = {};
if(queries.searchText && queries.searchText.length >= 2){ // 검색 글자 수 몇개 이상인지
var postQueries = [];
postQueries.push({ body: { $regex: new RegExp(queries.searchText, 'i') } });
if(postQueries.length > 0) searchQuery = {$or:postQueries};
}
return searchQuery;
}
// Routers
app.use('/articles',util.getPostQueryString, articleRouter)
// app.listen(3000)
// 뷰엔진 설정 추가
app.set('views', __dirname + '/views');
app.use(express.static(__dirname + "/public"));
// use routes 추가
app.use("/member", memberRoute);
// 추가
app.listen(PORT, function () {
console.log('Example app listening on port',PORT);
});