-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
104 lines (91 loc) · 2.48 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
const path = require("path");
const fs = require("fs");
let Datastore = require("nedb"),
db = new Datastore({ filename: "posts.db", autoload: true });
// fastify
const fastify = require("fastify")({
logger: true
});
// セッションとクッキーの設定
const fastifySession = require("fastify-session");
const fastifyCookie = require('fastify-cookie');
fastify.register(fastifyCookie, {
secret: "my-secret"
});
fastify.register(fastifySession, {
secret: "my-secret"
});
fastify.register(require("fastify-static"), {
root: path.join(__dirname, "public"),
prefix: "/"
});
fastify.register(require("fastify-formbody"));
fastify.register(require("point-of-view"), {
engine: {
handlebars: require("handlebars")
}
});
// SEOデータの読み込み
const seo = require("./src/seo.json");
if (seo.url === "glitch-default") {
seo.url = `https://${process.env.PROJECT_DOMAIN}.glitch.me`;
}
// GET
fastify.get("/", function(request, reply) {
db.find({})
.sort({ id: -1 })
.exec(function(err, posts) {
let params = {
seo: seo,
posts: posts,
setName: request.cookies.name ? request.cookies.name : ''
};
console.log('name: ' + request.session.post);
reply.view("/src/pages/index.hbs", params);
});
});
// POST
fastify.post("/", function(request, reply) {
let name = request.body.name;
let message = request.body.message;
if (name && message) {
db.count({}, function(err, count) {
// DBに追加
db.insert(
{
id: count + 1,
name: escapeSpecialChars(name),
message: escapeSpecialChars(message)
},
function(err, postAdded) {
if (err) console.log("There's a problem with the database: ", err);
else if (postAdded) console.log("New post inserted in the database");
}
);
});
}
// 名前をCookuieにセットし、リダイレクト(2重サブミット防止)
reply
.setCookie('name', name, {
domain: 'rkeijiban.glitch.me',
path: '/'
})
.redirect("/");
});
fastify.listen(process.env.PORT, function(err, address) {
if (err) {
fastify.log.error(err);
process.exit(1);
}
console.log(`Your app is listening on ${address}`);
fastify.log.info(`server listening on ${address}`);
});
// HTMLエスケープ
function escapeSpecialChars(str) {
return str
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}