mirror of
https://github.com/Kuingsmile/PicList.git
synced 2026-05-21 08:11:25 +08:00
✨ Feature(server): add http server for uploading images by a http request
port 37766
This commit is contained in:
72
src/main/server/index.ts
Normal file
72
src/main/server/index.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
import http from 'http'
|
||||
import routers from './routerManager'
|
||||
import {
|
||||
handleResponse
|
||||
} from './utils'
|
||||
|
||||
class Server {
|
||||
private httpServer: http.Server
|
||||
private port: number = 36677
|
||||
constructor () {
|
||||
this.httpServer = http.createServer(this.handleRequest)
|
||||
}
|
||||
private handleRequest = (request: http.IncomingMessage, response: http.ServerResponse) => {
|
||||
if (request.method === 'POST') {
|
||||
if (!routers.getHandler(request.url!)) {
|
||||
handleResponse({
|
||||
response,
|
||||
statusCode: 404,
|
||||
header: {},
|
||||
body: {
|
||||
success: false
|
||||
}
|
||||
})
|
||||
} else {
|
||||
let body: string = ''
|
||||
let postObj: IObj
|
||||
request.on('data', chunk => {
|
||||
body += chunk
|
||||
})
|
||||
request.on('end', () => {
|
||||
try {
|
||||
postObj = JSON.parse(body)
|
||||
} catch (err) {
|
||||
return handleResponse({
|
||||
response,
|
||||
body: {
|
||||
success: false,
|
||||
message: 'Not sending data in JSON format'
|
||||
}
|
||||
})
|
||||
}
|
||||
const handler = routers.getHandler(request.url!)
|
||||
handler!({
|
||||
...postObj,
|
||||
response
|
||||
})
|
||||
})
|
||||
}
|
||||
} else {
|
||||
response.statusCode = 404
|
||||
response.end()
|
||||
}
|
||||
}
|
||||
private listen = (port: number) => {
|
||||
console.log(`server listen at ${port}`)
|
||||
this.httpServer.listen(port).on('error', (err: ErrnoException) => {
|
||||
if (err.errno === 'EADDRINUSE') {
|
||||
console.log(`----- Port ${port} is busy, trying with port ${port + 1} -----`)
|
||||
this.port += 1
|
||||
this.listen(this.port)
|
||||
}
|
||||
})
|
||||
}
|
||||
startup () {
|
||||
this.listen(this.port)
|
||||
}
|
||||
shutdown () {
|
||||
this.httpServer.close()
|
||||
}
|
||||
}
|
||||
|
||||
export default new Server()
|
||||
20
src/main/server/router.ts
Normal file
20
src/main/server/router.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
class Router {
|
||||
private router = new Map<string, routeHandler>()
|
||||
|
||||
get (url: string, callback: routeHandler): void {
|
||||
this.router.set(url, callback)
|
||||
}
|
||||
post (url: string, callback: routeHandler): void {
|
||||
this.router.set(url, callback)
|
||||
}
|
||||
|
||||
getHandler (url: string) {
|
||||
if (this.router.has(url)) {
|
||||
return this.router.get(url)
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default new Router()
|
||||
69
src/main/server/routerManager.ts
Normal file
69
src/main/server/routerManager.ts
Normal file
@@ -0,0 +1,69 @@
|
||||
import router from './router'
|
||||
import {
|
||||
uploadWithClipboardFiles,
|
||||
uploadWithFiles
|
||||
} from '~/main/utils/busApi/index'
|
||||
import {
|
||||
handleResponse
|
||||
} from './utils'
|
||||
import logger from '../utils/logger'
|
||||
|
||||
router.get('/upload', async ({
|
||||
response,
|
||||
list = []
|
||||
} : {
|
||||
response: IHttpResponse,
|
||||
list?: string[]
|
||||
}): Promise<void> => {
|
||||
try {
|
||||
if (list.length === 0) {
|
||||
// upload with clipboard
|
||||
const res = await uploadWithClipboardFiles()
|
||||
if (res.success) {
|
||||
handleResponse({
|
||||
response,
|
||||
body: {
|
||||
success: true,
|
||||
result: [res.result]
|
||||
}
|
||||
})
|
||||
} else {
|
||||
handleResponse({
|
||||
response
|
||||
})
|
||||
}
|
||||
} else {
|
||||
// upload with files
|
||||
const pathList = list.map(item => {
|
||||
return {
|
||||
path: item
|
||||
}
|
||||
})
|
||||
const res = await uploadWithFiles(pathList)
|
||||
if (res.success) {
|
||||
handleResponse({
|
||||
response,
|
||||
body: {
|
||||
success: true,
|
||||
result: res.result
|
||||
}
|
||||
})
|
||||
} else {
|
||||
handleResponse({
|
||||
response
|
||||
})
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
logger.error(err)
|
||||
handleResponse({
|
||||
response,
|
||||
body: {
|
||||
success: false,
|
||||
message: err
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
export default router
|
||||
19
src/main/server/utils.ts
Normal file
19
src/main/server/utils.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
export const handleResponse = ({
|
||||
response,
|
||||
statusCode = 200,
|
||||
header = {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body = {
|
||||
success: false
|
||||
}
|
||||
} : {
|
||||
response: IHttpResponse,
|
||||
statusCode?: number,
|
||||
header?: IObj,
|
||||
body?: any
|
||||
}) => {
|
||||
response.writeHead(statusCode, header)
|
||||
response.write(JSON.stringify(body))
|
||||
response.end()
|
||||
}
|
||||
Reference in New Issue
Block a user