j7/app.js
2022-03-15 13:15:30 +08:00

132 lines
2.7 KiB
JavaScript

const express = require('express');
const mysql = require("mysql");
const utils = require('./utils');
const event = require('./event');
const config = require('./config');
const db = require('./db');
const app = express();
const handlers = {};
const middlewares = {};
const dbPools = {};
let sessionClass = null;
let useMiddlewares = [];
function listen(port) {
app.listen(port);
}
function get() {
}
function init() {
event.emitEvent(event.APP_INITIALIZED_EVENT);
}
function registerHandler(c, a, cb) {
handlers[a + '@' + c] = {
'cb': cb,
'middlewares': useMiddlewares
};
}
function injectionSession(sessionCls) {
sessionClass = sessionCls;
}
function addMiddleware(name, cb) {
middlewares[name] = cb;
}
function useMiddleware(list, cb) {
try {
useMiddlewares = [];
list.forEach((name) => {
useMiddlewares.push(middlewares[name]);
});
cb();
} finally {
useMiddlewares = [];
}
}
function registerDb(name, options) {
dbPools[name] = {
'options': options,
'pool': mysql.createPool({
host : options['host'],
user : options['user'],
password : options['passwd'],
database : options['database'],
stringifyObjects : true
})
};
}
function getDbConn(name) {
const ret = {
err: null,
conn: null,
};
return new Promise((resolve) => {
if (!(name in dbPools)) {
ret.err = 'dbname not exists ' + name;
resolve(ret);
return;
}
const pool = dbPools[name]['pool'];
pool.getConnection(function(err, conn) {
ret.err = err;
ret.conn = new db(conn);
resolve(ret);
});
});
}
process.on('unhandledRejection', (reason, promise) => {
console.log('Unhandled Rejection at:', promise, 'reason:', reason);
throw reason;
});
app.get('/webapp/index.php', async (req, rsp) => {
const c = req.query.c;
const a = req.query.a;
const handler = handlers[a + '@' + c];
if (handler) {
const cb = handler['cb'];
const middlewares = handler['middlewares'];
if (sessionClass) {
const session = new sessionClass(req, rsp);
middlewares.forEach(async (m) => {
await m(session);
});
await cb(session);
} else {
middlewares.forEach(async (m) => {
await m(req, rsp);
});
await cb(req, rsp);
}
} else {
utils.rspErr(rsp, 100, 'not found');
}
});
registerHandler('Ops', 'selfChecking', (req, rsp) => {
rsp.send(utils.jsonEncode({
'errcode': 0,
'errmsg': ''
}));
});
exports.init = init;
exports.listen = listen;
exports.get = get;
exports.registerHandler = registerHandler;
exports.injectionSession = injectionSession;
exports.addMiddleware = addMiddleware;
exports.useMiddleware = useMiddleware;
exports.registerDb = registerDb;
exports.getDbConn = getDbConn;