first commit

This commit is contained in:
编码猿
2024-09-27 01:21:21 +08:00
commit 20bc3c1b13
8 changed files with 367 additions and 0 deletions

23
.gitignore vendored Normal file
View File

@@ -0,0 +1,23 @@
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

1
.pydio Normal file
View File

@@ -0,0 +1 @@
68a2629f-51e8-4da9-89f5-592c0a3dba2c

7
http.rest Normal file
View File

@@ -0,0 +1,7 @@
POST http://127.0.0.1:3000/test
{
"id": "34",
"page": 11,
"name": "jk"
}

43
index.js Normal file
View File

@@ -0,0 +1,43 @@
const axios = require("axios");
const router = require("./run");
const config = {
BaseUrl: 'https://mbizhi.cheetahfun.com/sj',
list: {
search(keyword = "jk", page = 1) {
return `${config.BaseUrl}/search.html?search=${keyword}&page=${page}`
}
}
}
/**
* 闲着蛋疼使用原生nodejs模仿 express 自己实现了 express 的路由
* 已实现 get post 方法支持,和 参数解析 req.query.xxreq.body.xx
*/
// http://127.0.0.1:3000/search?keyword=jk&page=1
router.get("/search",async (req,res) => {
res.setHeader('Content-Type','application/json; charset=UTF-8');
let { keyword, page } = req.query
let result = await get(config.list.search(keyword,page));
res.json(result)
})
// router.get("/test",async (req,res) => {
// res.setHeader('Content-Type','application/json; charset=UTF-8');
// res.json(req.query)
// })
// router.post("/test",async (req,res) => {
// res.setHeader('Content-Type','application/json; charset=UTF-8');
// res.json(req.body)
// })
const get = async (url) => {
let res = await axios.get(url);
// 通过分析 元气桌面 网站源码发现当前页面的json接口数据是页面中的script代码运行后的函数返回值
// 所以先 match 提取 window.__NUXT__ 和 )) 中间的 核心js代码因为nodejs没有window所以先将代
// 码 中 window 替换为 config然后 eval 执行对方网站的 代码,拿到方法返回值,也就是我们的 【接口数据】
return eval(res.data.match(/window.__NUXT__([\s\S]*?)\)\);/)[0].replace("window", "config"))
}

169
package-lock.json generated Normal file
View File

@@ -0,0 +1,169 @@
{
"name": "yqbz",
"version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "yqbz",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"axios": "^1.4.0"
}
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/axios": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
"integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
"dependencies": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
},
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/follow-redirects": {
"version": "1.15.2",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"engines": {
"node": ">=4.0"
},
"peerDependenciesMeta": {
"debug": {
"optional": true
}
}
},
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dependencies": {
"mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
}
},
"dependencies": {
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"axios": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
"integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
"requires": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
},
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
"follow-redirects": {
"version": "1.15.2",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
},
"form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
}
},
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"requires": {
"mime-db": "1.52.0"
}
},
"proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
}
}
}

15
package.json Normal file
View File

@@ -0,0 +1,15 @@
{
"name": "yqbz",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "node-dev index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^1.4.0"
}
}

95
run.js Normal file
View 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

14
笔记.html Normal file
View File

@@ -0,0 +1,14 @@
进详情:
wallpaper_id: 356163
md356163.html
进入 tag页面
dtag_306/
最新数据
dtag_306/new
306tag -> tid