feat: 初步完成基礎功能
This commit is contained in:
1
config.yml
Normal file
1
config.yml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
path: string
|
||||||
42
index.ts
Normal file
42
index.ts
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
import fs from 'fs'
|
||||||
|
import got, {HTTPError, Options} from 'got'
|
||||||
|
import YAML from 'yaml'
|
||||||
|
|
||||||
|
import {timeout} from './util.js'
|
||||||
|
import {IrequestData} from './types.js'
|
||||||
|
|
||||||
|
const path: string = YAML.parse(fs.readFileSync('../config.yml', 'utf-8')).path
|
||||||
|
|
||||||
|
fs.watch(path, async function (event, filename) {
|
||||||
|
if (!(filename && event === 'change')) return
|
||||||
|
|
||||||
|
const jpath: string = `./${filename}`
|
||||||
|
const requestData: IrequestData = JSON.parse(fs.readFileSync(jpath).toString())
|
||||||
|
if (requestData.Processed === true) return
|
||||||
|
const method: any = requestData.Request.Mode.toUpperCase()
|
||||||
|
if (!['GET', 'POST', 'PUT', 'PATCH', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE'].includes(method)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const res = await got({
|
||||||
|
url: requestData.Request.URL,
|
||||||
|
method: method,
|
||||||
|
headers: requestData.Request.Headers,
|
||||||
|
body: requestData.Request.Body,
|
||||||
|
})
|
||||||
|
|
||||||
|
requestData.Response.StatusCode = res.statusCode
|
||||||
|
Object.keys(res.headers).forEach((e) => {
|
||||||
|
requestData.Response.Headers[e] = res.headers[e]
|
||||||
|
})
|
||||||
|
requestData.Response.Body = res.body
|
||||||
|
} catch (error) {
|
||||||
|
if (error instanceof HTTPError) {
|
||||||
|
requestData.Response.StatusCode = error.response.statusCode
|
||||||
|
} else {
|
||||||
|
requestData.Response.StatusCode = -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
requestData.Processed = true
|
||||||
|
fs.writeFileSync(jpath, JSON.stringify(requestData))
|
||||||
|
})
|
||||||
14
types.ts
Normal file
14
types.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
export interface IrequestData {
|
||||||
|
Request: {
|
||||||
|
Mode: string
|
||||||
|
URL: string
|
||||||
|
Headers: any
|
||||||
|
Body: string
|
||||||
|
}
|
||||||
|
Response: {
|
||||||
|
StatusCode: number
|
||||||
|
Headers: any
|
||||||
|
Body: string
|
||||||
|
}
|
||||||
|
Processed?: boolean
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user