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
这个提交包含在:
Guoguo
2026-04-29 05:58:20 -07:00
父节点 9f0e629c82
当前提交 bb4b80f867
修改 46 个文件,包含 4306 行新增2020 行删除
+63
查看文件
@@ -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)
})
}
}