mirror of
https://github.com/Kuingsmile/PicList.git
synced 2025-02-08 13:28:13 -05:00
🔨 Refactor(custom): refactor server
This commit is contained in:
parent
07c346a892
commit
47e5afe963
@ -11,8 +11,6 @@ import multer from 'multer'
|
|||||||
import { app } from 'electron'
|
import { app } from 'electron'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
import { marked } from 'marked'
|
|
||||||
import { markdownContent } from './apiDoc'
|
|
||||||
|
|
||||||
const DEFAULT_PORT = 36677
|
const DEFAULT_PORT = 36677
|
||||||
const DEFAULT_HOST = '0.0.0.0'
|
const DEFAULT_HOST = '0.0.0.0'
|
||||||
@ -83,9 +81,9 @@ class Server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private handlePostRequest = (request: http.IncomingMessage, response: http.ServerResponse) => {
|
private handlePostRequest = (request: http.IncomingMessage, response: http.ServerResponse) => {
|
||||||
const [url, query] = request.url!.split('?')
|
const [url, query] = (request.url || '').split('?')
|
||||||
if (!routers.getHandler(url!)) {
|
if (!routers.getHandler(url, 'POST')) {
|
||||||
logger.warn(`[PicList Server] don't support [${url}] url`)
|
logger.warn(`[PicList Server] don't support [${url}] endpoint`)
|
||||||
handleResponse({
|
handleResponse({
|
||||||
response,
|
response,
|
||||||
statusCode: 404,
|
statusCode: 404,
|
||||||
@ -110,7 +108,7 @@ class Server {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
const list = request.files.map(file => file.path)
|
const list = request.files.map(file => file.path)
|
||||||
logger.info('[PicList Server] get a formData request')
|
logger.info('[PicList Server] get a formData request')
|
||||||
const handler = routers.getHandler(url)?.handler
|
const handler = routers.getHandler(url!, 'POST')?.handler
|
||||||
if (handler) {
|
if (handler) {
|
||||||
handler({
|
handler({
|
||||||
list,
|
list,
|
||||||
@ -139,7 +137,7 @@ class Server {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
logger.info('[PicList Server] get the request', body)
|
logger.info('[PicList Server] get the request', body)
|
||||||
const handler = routers.getHandler(url!)?.handler
|
const handler = routers.getHandler(url!, 'POST')?.handler
|
||||||
handler!({
|
handler!({
|
||||||
...postObj,
|
...postObj,
|
||||||
response,
|
response,
|
||||||
@ -151,10 +149,20 @@ class Server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private handleGetRequest = (_request: http.IncomingMessage, response: http.ServerResponse) => {
|
private handleGetRequest = (_request: http.IncomingMessage, response: http.ServerResponse) => {
|
||||||
response.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' })
|
const [url, query] = (_request.url || '').split('?')
|
||||||
const htmlContent = marked(markdownContent)
|
if (!routers.getHandler(url, 'GET')) {
|
||||||
response.write(htmlContent)
|
console.log(`[PicList Server] don't support [${url}] endpoint`)
|
||||||
response.end()
|
response.statusCode = 404
|
||||||
|
response.end()
|
||||||
|
} else {
|
||||||
|
const handler = routers.getHandler(url, 'GET')?.handler
|
||||||
|
if (handler) {
|
||||||
|
handler({
|
||||||
|
response,
|
||||||
|
urlparams: query ? new URLSearchParams(query) : undefined
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// port as string is a bug
|
// port as string is a bug
|
||||||
|
@ -1,20 +1,36 @@
|
|||||||
|
type HttpMethod = 'GET' | 'POST'
|
||||||
|
|
||||||
class Router {
|
class Router {
|
||||||
private router = new Map<string, {handler: routeHandler, urlparams?: URLSearchParams}>()
|
private router = new Map<string, Map<HttpMethod, {handler: routeHandler, urlparams?: URLSearchParams}>>()
|
||||||
|
|
||||||
|
private addRoute (method: HttpMethod, url: string, callback: routeHandler, urlparams?: URLSearchParams): void {
|
||||||
|
if (!this.router.has(url)) {
|
||||||
|
this.router.set(url, new Map())
|
||||||
|
}
|
||||||
|
this.router.get(url)!.set(method, { handler: callback, urlparams })
|
||||||
|
}
|
||||||
|
|
||||||
get (url: string, callback: routeHandler, urlparams?: URLSearchParams): void {
|
get (url: string, callback: routeHandler, urlparams?: URLSearchParams): void {
|
||||||
this.router.set(url, { handler: callback, urlparams })
|
this.addRoute('GET', url, callback, urlparams)
|
||||||
}
|
}
|
||||||
|
|
||||||
post (url: string, callback: routeHandler, urlparams?: URLSearchParams): void {
|
post (url: string, callback: routeHandler, urlparams?: URLSearchParams): void {
|
||||||
this.router.set(url, { handler: callback, urlparams })
|
this.addRoute('POST', url, callback, urlparams)
|
||||||
}
|
}
|
||||||
|
|
||||||
getHandler (url: string) {
|
any (url: string, callback: routeHandler, urlparams?: URLSearchParams): void {
|
||||||
|
this.addRoute('GET', url, callback, urlparams)
|
||||||
|
this.addRoute('POST', url, callback, urlparams)
|
||||||
|
}
|
||||||
|
|
||||||
|
getHandler (url: string, method: HttpMethod) {
|
||||||
if (this.router.has(url)) {
|
if (this.router.has(url)) {
|
||||||
return this.router.get(url)
|
const methods = this.router.get(url)!
|
||||||
} else {
|
if (methods.has(method)) {
|
||||||
return null
|
return methods.get(method)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,6 +12,9 @@ import { changeCurrentUploader } from '../utils/handleUploaderConfig'
|
|||||||
import { app } from 'electron'
|
import { app } from 'electron'
|
||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
import { AESHelper } from '../utils/aesHelper'
|
import { AESHelper } from '../utils/aesHelper'
|
||||||
|
import { marked } from 'marked'
|
||||||
|
import { markdownContent } from './apiDoc'
|
||||||
|
import http from 'http'
|
||||||
|
|
||||||
const appPath = app.getPath('userData')
|
const appPath = app.getPath('userData')
|
||||||
const serverTempDir = path.join(appPath, 'serverTemp')
|
const serverTempDir = path.join(appPath, 'serverTemp')
|
||||||
@ -22,6 +25,16 @@ const LOG_PATH = path.join(STORE_PATH, 'piclist.log')
|
|||||||
const errorMessage = `upload error. see ${LOG_PATH} for more detail.`
|
const errorMessage = `upload error. see ${LOG_PATH} for more detail.`
|
||||||
const deleteErrorMessage = `delete error. see ${LOG_PATH} for more detail.`
|
const deleteErrorMessage = `delete error. see ${LOG_PATH} for more detail.`
|
||||||
|
|
||||||
|
async function responseForGet ({ response } : {response: http.ServerResponse}) {
|
||||||
|
response.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' })
|
||||||
|
const htmlContent = marked(markdownContent)
|
||||||
|
response.write(htmlContent)
|
||||||
|
response.end()
|
||||||
|
}
|
||||||
|
|
||||||
|
router.get('/', responseForGet)
|
||||||
|
router.get('/upload', responseForGet)
|
||||||
|
|
||||||
router.post('/upload', async ({
|
router.post('/upload', async ({
|
||||||
response,
|
response,
|
||||||
list = [],
|
list = [],
|
||||||
@ -203,7 +216,7 @@ router.post('/delete', async ({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
router.post('/heartbeat', async ({
|
router.any('/heartbeat', async ({
|
||||||
response
|
response
|
||||||
} : {
|
} : {
|
||||||
response: IHttpResponse,
|
response: IHttpResponse,
|
||||||
|
Loading…
Reference in New Issue
Block a user