refactor: restructure entire project for human maintainability
Server: - Add Express framework, replace custom router/request parser - Create DAO layer (12 files) centralizing all 73 SQL queries - Rewrite 7 route files as thin Express controllers calling DAOs - Add SCF-to-Express adapter (lib/serverless.js) - Add auth middleware (middleware/auth.js) - Remove dead code from lib/auth.js Admin console: - Extract DataTable component (table + pagination) - Extract ConfirmModal component (modal + form styles) - Create listMixin for paginated list pages - Move form styles to common.css for slot compatibility - Refactor device + subscription pages as examples Miniprogram: - Split 734-line BLE monolith into 4 focused modules (protocol, connection, commands, barrel index) - Create API module (utils/api.js) with named functions - Create page utilities (utils/page.js) - Refactor index + profile pages to use API module
这个提交包含在:
@@ -0,0 +1,63 @@
|
||||
const http = require('http')
|
||||
|
||||
module.exports = function serverless(app) {
|
||||
return async function handler(event) {
|
||||
const method = String(event.httpMethod || event.method || 'GET').toUpperCase()
|
||||
const path = event.path || '/'
|
||||
const headers = event.headers || {}
|
||||
const qs = event.queryStringParameters || {}
|
||||
const qsStr = Object.keys(qs).map(k => encodeURIComponent(k) + '=' + encodeURIComponent(qs[k])).join('&')
|
||||
const url = path + (qsStr ? '?' + qsStr : '')
|
||||
|
||||
let rawBody = event.body || ''
|
||||
if (event.isBase64Encoded && rawBody) rawBody = Buffer.from(rawBody, 'base64').toString('utf8')
|
||||
|
||||
return new Promise((resolve) => {
|
||||
const req = new http.IncomingMessage()
|
||||
req.method = method
|
||||
req.url = url
|
||||
req.headers = {}
|
||||
Object.keys(headers).forEach(k => { req.headers[k.toLowerCase()] = headers[k] })
|
||||
if (event.requestContext && event.requestContext.sourceIp) {
|
||||
req.headers['x-forwarded-for'] = req.headers['x-forwarded-for'] || event.requestContext.sourceIp
|
||||
}
|
||||
|
||||
const res = new http.ServerResponse(req)
|
||||
let body = ''
|
||||
const resHeaders = {}
|
||||
|
||||
res.writeHead = function (statusCode, reasonOrHeaders, maybeHeaders) {
|
||||
res.statusCode = statusCode
|
||||
const h = maybeHeaders || (typeof reasonOrHeaders === 'object' ? reasonOrHeaders : {})
|
||||
Object.assign(resHeaders, h)
|
||||
}
|
||||
|
||||
const originalSetHeader = res.setHeader.bind(res)
|
||||
res.setHeader = function (name, value) {
|
||||
resHeaders[name.toLowerCase()] = value
|
||||
originalSetHeader(name, value)
|
||||
}
|
||||
|
||||
res.end = function (chunk) {
|
||||
if (chunk) body += chunk
|
||||
resolve({
|
||||
isBase64Encoded: false,
|
||||
statusCode: res.statusCode || 200,
|
||||
headers: Object.assign({
|
||||
'content-type': 'application/json; charset=utf-8'
|
||||
}, resHeaders),
|
||||
body
|
||||
})
|
||||
}
|
||||
|
||||
res.write = function (chunk) { body += chunk }
|
||||
|
||||
if (rawBody) {
|
||||
req.push(rawBody)
|
||||
}
|
||||
req.push(null)
|
||||
|
||||
app(req, res)
|
||||
})
|
||||
}
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户