UNPKG

mysql-rest

Version:

One command to generate REST APIs for any MySql database, support multi databases

143 lines (131 loc) 8.72 kB
"use strict"; const program = require("commander"); const colors = require("colors"); const maxCpus = require("os").cpus().length; const packageJson = require("../../package.json"); program.on("--help", () => { console.log(""); console.log(" Examples:".blue); console.log(""); console.log(" $ xmysql -u username -p password -h localhost".blue); console.log(" $ xmysql --dialect mysql --mysqlConnectionLimit 50 --mysqlDatabase mydb".blue); console.log(" $ xmysql --dialect dameng -h localhost -o 5236 -u SYSDBA -p SYSDBA --dmPoolMax 20 --dmPoolMin 5".blue); console.log(" $ xmysql --dialect mysql -u root -p password --disableAccessLog".blue); console.log(""); }); program .version(packageJson.version) .option("-h, --host <n>", "hostname of database / localhost by default") .option("-u, --user <n>", "username of database / root by default") .option("-p, --password <n>", "password of database / empty by default") .option("-r, --ipAddress <n>", "IP interface of your server / localhost by default") .option("-n, --portNumber <n>", "port number for app / 3000 by default") .option("-o, --port <n>", "port number for mysql / 3306 by default") .option("-S, --socketPath <n>", "unix socket path / not used by default") .option("-s, --storageFolder <n>", "storage folder / current working dir by default / available only with local") .option("-i, --ignoreTables <n>", "comma separated table names to ignore") .option("-a, --apiPrefix <n>", 'api url prefix / "/api/" by default') .option("-y, --readOnly", "readonly apis / false by default") .option("-c, --useCpuCores <n>", "use number of CPU cores (using cluster) / 1 by default") .option("--disableAccessLog", "disable HTTP access logging for production / false by default") .option("--dialect <n>", "database dialect(mysql/dameng). mysql by default") // 达梦数据库连接池参数 .option("--dmPoolAlias <n>", "connection pool alias for dameng database") .option("--dmPoolMax <n>", "maximum number of connections in pool / 16 by default for dameng") .option("--dmPoolMin <n>", "minimum number of connections in pool / 8 by default for dameng") .option("--dmPoolTimeout <n>", "connection idle timeout in seconds, 0 means never close / 60 by default for dameng") .option("--dmQueueMax <n>", "maximum queue length for connection requests, -1 means unlimited / 500 by default for dameng") .option("--dmQueueRequests", "whether to queue requests when pool reaches max connections / true by default for dameng") .option("--dmQueueTimeout <n>", "timeout for queued requests in milliseconds, 0 means wait forever / 60000 by default for dameng") .option("--dmTestOnBorrow", "whether to validate connection before use / false by default for dameng") .option("--dmValidationQuery <n>", "SQL query for connection validation / 'select 1;' by default for dameng") // MySQL连接和连接池参数 .option("--mysqlDatabase <n>", "name of the database to use for mysql connection") .option("--mysqlCharset <n>", "charset for mysql connection / 'UTF8_GENERAL_CI' by default") .option("--mysqlTimezone <n>", "timezone for mysql connection / 'local' by default") .option("--mysqlConnectTimeout <n>", "connection timeout in milliseconds / 10000 by default") .option("--mysqlStringifyObjects", "stringify objects instead of converting to values / false by default") .option("--mysqlSupportBigNumbers", "enable support for big numbers (BIGINT and DECIMAL) / false by default") .option("--mysqlBigNumberStrings", "return big numbers as strings / false by default") .option("--mysqlDateStrings", "return date types as strings / false by default") .option("--mysqlMultipleStatements", "allow multiple mysql statements per query / false by default") .option("--mysqlTrace", "generate stack traces on errors / true by default") .option("--mysqlEnableKeepAlive", "enable keep-alive on socket / true by default") .option("--mysqlKeepAliveInitialDelay <n>", "initial delay for keep-alive in milliseconds / 0 by default") // MySQL连接池专用参数 .option("--mysqlWaitForConnections", "wait for connections when pool limit reached / true by default") .option("--mysqlConnectionLimit <n>", "maximum number of connections in pool / 10 by default") .option("--mysqlMaxIdle <n>", "maximum number of idle connections / same as connectionLimit by default") .option("--mysqlIdleTimeout <n>", "idle connections timeout in milliseconds / 60000 by default") .option("--mysqlQueueLimit <n>", "maximum queued connection requests, 0 means no limit / 0 by default") .parse(process.argv); function paintHelp(txt) { return colors.magenta(txt); //display the help text in a color } exports.handle = (program) => { /**************** START : default values ****************/ program.ipAddress = program.ipAddress || "localhost"; program.portNumber = program.portNumber || 3000; program.port = program.port || 3306; program.user = program.user || "root"; program.password = program.password || ""; program.host = program.host || "localhost"; program.socketPath = program.socketPath || ""; program.storageFolder = program.storageFolder || process.cwd(); program.apiPrefix = program.apiPrefix || "/api/"; program.readOnly = program.readOnly || false; program.useCpuCores = program.useCpuCores || 1; program.dialect = program.dialect || "mysql"; program.disableAccessLog = program.disableAccessLog !== undefined ? program.disableAccessLog : false; // 达梦数据库连接池参数默认值 program.dmPoolAlias = program.dmPoolAlias || ""; program.dmPoolMax = program.dmPoolMax ? parseInt(program.dmPoolMax) : 16; program.dmPoolMin = program.dmPoolMin ? parseInt(program.dmPoolMin) : 8; program.dmPoolTimeout = program.dmPoolTimeout ? parseInt(program.dmPoolTimeout) : 60; program.dmQueueMax = program.dmQueueMax ? parseInt(program.dmQueueMax) : 500; program.dmQueueRequests = program.dmQueueRequests !== undefined ? program.dmQueueRequests : true; program.dmQueueTimeout = program.dmQueueTimeout ? parseInt(program.dmQueueTimeout) : 60000; program.dmTestOnBorrow = program.dmTestOnBorrow !== undefined ? program.dmTestOnBorrow : false; program.dmValidationQuery = program.dmValidationQuery || "select 1;"; // MySQL连接参数默认值 program.mysqlDatabase = program.mysqlDatabase || ""; program.mysqlCharset = program.mysqlCharset || "UTF8_GENERAL_CI"; program.mysqlTimezone = program.mysqlTimezone || "local"; program.mysqlConnectTimeout = program.mysqlConnectTimeout ? parseInt(program.mysqlConnectTimeout) : 10000; program.mysqlStringifyObjects = program.mysqlStringifyObjects !== undefined ? program.mysqlStringifyObjects : false; program.mysqlSupportBigNumbers = program.mysqlSupportBigNumbers !== undefined ? program.mysqlSupportBigNumbers : false; program.mysqlBigNumberStrings = program.mysqlBigNumberStrings !== undefined ? program.mysqlBigNumberStrings : false; program.mysqlDateStrings = program.mysqlDateStrings !== undefined ? program.mysqlDateStrings : false; program.mysqlMultipleStatements = program.mysqlMultipleStatements !== undefined ? program.mysqlMultipleStatements : false; program.mysqlTrace = program.mysqlTrace !== undefined ? program.mysqlTrace : true; program.mysqlEnableKeepAlive = program.mysqlEnableKeepAlive !== undefined ? program.mysqlEnableKeepAlive : true; program.mysqlKeepAliveInitialDelay = program.mysqlKeepAliveInitialDelay ? parseInt(program.mysqlKeepAliveInitialDelay) : 0; // MySQL连接池参数默认值 program.mysqlWaitForConnections = program.mysqlWaitForConnections !== undefined ? program.mysqlWaitForConnections : true; program.mysqlConnectionLimit = program.mysqlConnectionLimit ? parseInt(program.mysqlConnectionLimit) : 10; program.mysqlMaxIdle = program.mysqlMaxIdle ? parseInt(program.mysqlMaxIdle) : program.mysqlConnectionLimit; program.mysqlIdleTimeout = program.mysqlIdleTimeout ? parseInt(program.mysqlIdleTimeout) : 60000; program.mysqlQueueLimit = program.mysqlQueueLimit ? parseInt(program.mysqlQueueLimit) : 0; if (program.useCpuCores === "0") { program.useCpuCores = maxCpus; } if (program.ignoreTables) { let ignoreTables = program.ignoreTables.split(","); program.ignoreTables = {}; for (var i = 0; i < ignoreTables.length; ++i) { program.ignoreTables[ignoreTables[i]] = ignoreTables[i]; } } else { program.ignoreTables = {}; } program.connectionLimit = 10; if ( program.host === "localhost" || program.host === "127.0.0.1" || program.host === "::1" ) { program.dynamic = 1; } // console.log(program); /**************** END : default values ****************/ };