Add 卓米会 mini program and admin server.
Initial commit of the WeChat mini program, Express backend, and admin console. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
const crypto = require('crypto')
|
||||
|
||||
class HttpError extends Error {
|
||||
constructor(status, message) {
|
||||
super(message)
|
||||
this.status = status
|
||||
}
|
||||
}
|
||||
|
||||
function uid(prefix) {
|
||||
return `${prefix}${Date.now().toString(36)}${crypto.randomBytes(2).toString('hex')}`
|
||||
}
|
||||
|
||||
function token() {
|
||||
return crypto.randomBytes(24).toString('hex')
|
||||
}
|
||||
|
||||
function ok(res, data) {
|
||||
res.json({ ok: true, data })
|
||||
}
|
||||
|
||||
function fail(res, status, message) {
|
||||
res.status(status).json({ ok: false, message })
|
||||
}
|
||||
|
||||
// Express 4 does not forward rejected promises to the error handler.
|
||||
function wrap(handler) {
|
||||
return (req, res, next) => Promise.resolve(handler(req, res, next)).catch(next)
|
||||
}
|
||||
|
||||
function str(value, max) {
|
||||
const text = value == null ? '' : String(value).trim()
|
||||
return max ? text.slice(0, max) : text
|
||||
}
|
||||
|
||||
function has(body, key) {
|
||||
return Object.prototype.hasOwnProperty.call(body || {}, key)
|
||||
}
|
||||
|
||||
const PHONE_RE = /^1\d{10}$/
|
||||
|
||||
module.exports = { HttpError, uid, token, ok, fail, wrap, str, has, PHONE_RE }
|
||||
Reference in New Issue
Block a user