app.js
3.35 KB
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
116
117
118
119
120
121
122
123
124
125
import "@babel/polyfill";
import dotenv from "dotenv";
import express from "express";
import morgan from "morgan";
import helmet from "helmet";
import cookieParser from "cookie-parser";
import bodyParser from "body-parser";
import mongoose from "mongoose";
import session from "express-session";
import flash from "express-flash";
import MongoStore from "connect-mongo";
import { localsMiddleware, uploadFile } from "./middlewares";
import File from "./models/File";
import routes from "./routes";
import globalRouter from "./routers/globalRouter";
import fileRouter from "./routers/fileRouter";
import redis from 'redis';
import JSON from 'JSON';
dotenv.config();
const app = express();
const client = redis.createClient(6379,'127.0.0.1');
const CokieStore = MongoStore(session);
app.use(helmet());
app.set("view engine", "pug");
app.use("/uploads", express.static("uploads"));
app.use("/static", express.static("static"));
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true })); // json, html, text, urlencoded 할 거 없이 다 parser할 수 있도록 설정해줘야 한다.
app.use(morgan("dev"));
app.use(
session({
secret: process.env.COOKIE_SECRET,
resave: true,
saveUninitialized: false,
store: new CokieStore({ mongooseConnection: mongoose.connection }),
})
);
app.use(flash());
app.use(localsMiddleware);
app.use(routes.home, globalRouter);
//app.use(routes.files, fileRouter);
app.use(function(req,res,next){
req.cache = client;
next();
})
// Caching
app.use(function(req,res,next){
req.cache = client;
next();
})
app.get(`/files${routes.upload}`, (req, res) =>
res.render("upload", { pageTitle: "Upload" }));
app.post(`/files${routes.upload}`, uploadFile, (req, res) => {
// multer를 해야 파일이 넘어가는 것이 나타난다.
req.accepts('application/json');
const key = req.body.title;
const value = JSON.stringify(req.body);
req.cache.set(key, value, (err, data) => {
if(err){
console.log(err);
res.send("error"+err);
return;
}
req.cache.expire(key, 10);
console.log(value);
res.send(value);
});
});
app.get('/files/:title', (req, res, next) => {
const key = req.params.title;
console.log('title : ' + key);
req.cache.get(key, (err, data) => {
if(err){
console.log(err);
res.send("error : " + err);
return;
}
const value = JSON.parse(data);
res.json(value);
});
});
app.get('/view_cache', (req, res) => {
req.cache.get('/files/:title', async (err, data) => {
if(err){
console.log(err);
res.send("error : " + err);
return;
}
if(!data) {
const allData = await File.find({}).sort({ _id: -1 });
const dataArr = JSON.stringify(allData);
req.cache.set('/files/:title', dataArr, (err, data) => {
if(err){
console.log(err);
res.send("error :" + err);
return;
}
req.cache.expire('/files/:title', 10);
res.send(dataArr)
})
}
else {
res.send(data)
}
});
});
export default app; // 파일을 불러올때 app object를 준다는 의미.