first commit
This commit is contained in:
95
run.js
Normal file
95
run.js
Normal file
@@ -0,0 +1,95 @@
|
||||
const http = require("http");
|
||||
const { URL } = require("url");
|
||||
|
||||
let map = new Map();
|
||||
map.set("get", {})
|
||||
map.set("post", {})
|
||||
let port = 3000
|
||||
let hostName = "127.0.0.1"
|
||||
|
||||
|
||||
let server = http.createServer()
|
||||
|
||||
server.listen(port, hostName, () => {
|
||||
console.log(`app is run http://${hostName}:${port}`);
|
||||
})
|
||||
|
||||
|
||||
server.get = (path, callback) => {
|
||||
map.get("get")[path] = callback
|
||||
}
|
||||
|
||||
server.post = (path, callback) => {
|
||||
map.get("post")[path] = callback
|
||||
}
|
||||
|
||||
server.on("request", async (req, res) => {
|
||||
if (req.url != "/favicon.ico") {
|
||||
json(res)
|
||||
|
||||
// 请求方式转小写
|
||||
req.method = req.method.toLowerCase()
|
||||
// 解析请求地址
|
||||
req.url = new URL(req.url, `http://${req.headers.host}`)
|
||||
|
||||
await handleReqParams(req)
|
||||
|
||||
var pathName = req.url.pathname;
|
||||
if (map.get(req.method)[pathName] != undefined) {
|
||||
await map.get(req.method)[pathName](req, res)
|
||||
} else {
|
||||
// 如果请求不存在的话
|
||||
res.end(`${req.method} methods to path: ${pathName} not found`)
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
/**
|
||||
* 直接响应json数据
|
||||
* @param {*} res
|
||||
*/
|
||||
const json = (res) => {
|
||||
res.json = (data) => res.end(JSON.stringify(data))
|
||||
}
|
||||
|
||||
/**
|
||||
* GET请求参数转对象
|
||||
* @param {*} req
|
||||
*/
|
||||
const handleReqParams = (req) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
req.query = {}
|
||||
req.body = {}
|
||||
|
||||
switch (req.method) {
|
||||
case "get":
|
||||
// 如果地址后面没有参数,则处理参数
|
||||
if (req.url.search.length != 0) {
|
||||
req.query = stringToObj(req.url.searchParams.toString())
|
||||
}
|
||||
resolve(req)
|
||||
break;
|
||||
|
||||
case "post":
|
||||
req.on('data', (data) => req.body = JSON.parse(data.toString()));
|
||||
req.on('end', () => resolve(req))
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function stringToObj(str) {
|
||||
var obj = {};
|
||||
var temp = str.split('&')
|
||||
for (var i = 0; i < temp.length; i++) {
|
||||
var t = temp[i].split('=')
|
||||
obj[t[0]] = Number.isNaN(Number(t[1])) ? decodeURIComponent(t[1]) : Number(t[1])
|
||||
}
|
||||
return obj
|
||||
}
|
||||
|
||||
module.exports = server
|
||||
Reference in New Issue
Block a user