-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
155 lines (133 loc) · 3.82 KB
/
app.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
const querystring = require('querystring')
const {get,set} = require('./src/db/redis')
const handleBlogRouter = require('./src/router/blog')
const handleUserRouter = require('./src/router/user')
const getCookieExpires = () => {
const d = new Date()
d.setTime(d.getTime() + (24 * 60 * 60 * 1000))
return d.toGMTString()
}
//session数据
// const SESSION_DATA = {}
//用于处理post data
const getPostData = (req) => {
const promise = new Promise((resolve,reject) => {
if (req.method !== 'POST') {
resolve({})
return
}
if (req.headers['content-type'] !== 'application/json') {
resolve({})
return
}
let postData = ''
req.on('data',chunk => {
postData += chunk.toString()
})
req.on('end', () => {
if(!postData){
resolve({})
}
resolve(
JSON.parse(postData)
)
})
})
return promise
}
const serverHandle = (req, res) =>{
//设置返回格式 JSON
res.setHeader('Content-type','application/json')
//获取path
const url = req.url
req.path = url.split('?')[0]
//解析query
req.query = querystring.parse(url.split('?')[1])
//解析cookie
req.cookie = {}
const cookieStr = req.headers.cookie || ''
cookieStr.split(';').forEach(
item => {
if(!item) {
return
}
const arr = item.split('=')
const key = arr[0].trim()
const val = arr[1].trim()
// console.log(key)
// console.log(val)
req.cookie[key] = val
}
)
//解析 session
// let needSetCookie = false
// let userId = req.cookie.userId
// if (userId) {
// if (!SESSION_DATA[userId]){
// SESSION_DATA[userId] = {}
// }
// } else {
// needSetCookie = true
// userId = `${Date.now()}_${Math.random()}`
// SESSION_DATA[userId] = {}
// }
// req.session = SESSION_DATA[userId]
//解析 session 使用redis
let needSetCookie = false
let userId = req.cookie.userid
if (!userId) {
needSetCookie = true
userId = `${Date.now()}_${Math.random()}`
//初始化redis中的session值
set(userId,{})
}
//获取session
req.sessionId = userId
get(req.sessionId).then(sessionData => {
if(sessionData == null) {
//初始化 redis 中的 session 值
set(req.sessionId,{})
//设置session
req.session = {}
} else {
req.session = sessionData
}
console.log('req.session ',req.session)
//处理post data
return getPostData(req)
})
.then(postData => {
req.body = postData
//处理blog路由
const blogResult = handleBlogRouter(req,res)
if ( blogResult ) {
blogResult.then(blogData => {
if(needSetCookie) {
res.setHeader('Set-Cookie',`userid=${userId};path=/;httpOnly;expires=${getCookieExpires()}`)
}
res.end(
JSON.stringify(blogData)
)
})
return
}
const userResult = handleUserRouter(req,res)
if (userResult) {
userResult.then(userData => {
if(needSetCookie) {
res.setHeader('Set-Cookie',`userid=${userId};path=/;httpOnly;expires=${getCookieExpires()}`)
}
res.end(
JSON.stringify(userData)
)
})
return
}
//未命中路由,返回404
res.writeHead(404,{"Content-type":"text/plain"})
res.write("404 Not Found\n")
res.end()
})
}
module.exports = serverHandle
//env: process.env.NODE_ENV