egg-sequelize-auto下划线命名自动转驼峰命名方法
最近写项目用到了eggs,里边有个egg-sequelize-auto的插件,很好用。可是查询出来的属性全是下划线间隔的命名方式。返给前端的话有点不够优雅。在网上找了一圈,也试了一圈都不行。最后没办法,上绝招(查看源码)。
手撸了一下egg-sequelize-auto的源码,发现了一些问题。先说一下egg-sequelize-auto的目录结构
│ .gitignore │ .jsbeautifyrc │ .npmignore │ config.json │ index.js │ LICENSE │ package.json │ README.md │ yarn.lock │ ├─bin │ egg-sequelize-auto │ sequelize-auto │ └─lib │ index.js │ └─sequelize-auto │ index.js │ sql-string.js │ └─dialects index.js
先看看reame.md,安装了egg-sequelize-auto之后就可以用egg-sequelize-auto和sequelize-auto这两个命令自动生成数据库Model具体的生成方法用这个命令
sequelize-auto -h 127.0.0.1 -d database -u username -x password -p 3306 -C -a ./model_config.json -o server/models/models
- database 数据库名称
- username 用户名
- password 密码
- -C 参数时用来将命名方式由下划线间隔转为驼峰式(不过现在sequelize-auto可以用,但是egg-sequelize-auto不能用,一会儿会讲解)
- -c 引入一个json文件补充生成数据库的生成选项(不过现在两个命令都不能用,一会儿也会讲解)
通过源码目录会发现一个目录bin而这里有两个文件分别对应sequilize-auto和egg-sequelize-auto这两类命令,先看 egg-sequelize-auto 的关键源码
const EggSequelizeAuto = require('../'); const program = require('commander'); const path = require('path'); program .usage('-h <host> -d <database> -u <user> -x [password] -p [port] --dialect [dialect] -c [/path/to/config] -o [/path/to/models] -t [tableName]') .version(require('../package.json').version) .option('-h, --host [host]', 'hostname or ip for the database', 'localhost') .option('-d, --database <database>', 'database name') .option('-u, --user [user]', 'username for database', 'root') .option('-x, --pass [pass]', 'password for database', null) .option('-p, --port [port]', 'port for database', 3306) .option('-s, --schema <name>', 'database schema') .option('-c, --config <file>', 'JSON file for Sequelize\'s constructor "options" flag object') .option('-o, --output <dir>', 'models output directory') .option('-e, --dialect [dialect]', 'database dialect, such as mysql, mssql, sqlite', 'mysql') .option('-a, --additional <file>', 'JSON file containing model definitions for Sequelize\'s constructor') .option('-t, --tables <names>', 'comma-separated names of tables to import') .option('-T, --skip-tables <names>', 'comma-separated names of tables to skip') .option('-C, --camel', 'use camel case to name models and fields') .parse(process.argv); const config = { host: program.host || 'localhost', port: program.port, dialect: program.dialect || 'mysql', database: program.database, storage: program.database, schema: program.schema, username: program.user || 'root', password: program.pass || null, addtional: !!program.addtional ? require(path.resolve(program.addtional)) : {}, spaces: true, indentation: 2, directory: program.output || path.join(process.cwd(), './app/model'), tables: !!program.tables ? program.tables.split(',') : null, skipTables: !!program.skipTables ? program.skipTables.split(',') : null, camelCase: !!program.camelCase }; if (!!program.config) { let _config = require(path.resolve(program.config)); if (typeof _config === 'function') { _config = _config({}); _config = _config && _config.sequelize; } Object.assign(config, _config); }
先说-C(大写C)不能用的原因是因为变量的名称没有对上
.option('-C --($1)', 'use camel case to name models and fields') camelCase: !!program.($2) //只要$1和$2对应上就可以了
再说-c(小写c)不能用的原因就是少了一行代码
在两行代码之间加入如下代码,就能引入json文件来补充设置了。
config: program.config,
个人比较倾向于用json文件补充设置,因为json能够设置的更多,我的 model_config.json的内容是这样的
{ "additional": { "timestamps": false },"camelCase": true , "host": "192.168.1.100", "output": "./app/model", "port": 3306, "database": "**" , "username": "**", "password": "**" }
然后命令就可以简化成这样了
egg-sequelize-auto -c .modelconfig.json
当然这个要在安装完依赖之后改源码,如果不想改代码也可以下载我仓库里的这个依赖 https://github.com/haunerg/egg-sequelize-auto.git
如果你还想偷懒的话可以用下面的命令安装
npm i egg-sequelize-auto git+https://github.com/haunerg/egg-sequelize-auto.git
或者改一下您的package.json文件,在dependencies下面加上这一行代码然后 运行npm i
"egg-sequelize-auto": "github:haunerg/egg-sequelize-auto"
敲黑板!!最后在您的package.json 文件的 scripts 项下面加入代码就可以自动创建model了,而且是驼峰命名的。
"scripts": { "esa-db": "egg-sequelize-auto -c ./model_config.json", "sa-db": "sequelize-auto -c ./model_config.json" },
esa-db 和 sa-db 是npm run 的名字可以自己更改,model_config.json 是json文件的名字根据自己的文件名和路径自己更改
好了,就先说到这里,欢迎大家留言和点赞关注,毕竟原创不易。
本文来自博客园,作者:hauner,转载请注明原文链接:https://www.cnblogs.com/hauner/p/15868545.html