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文件的名字根据自己的文件名和路径自己更改

  好了,就先说到这里,欢迎大家留言和点赞关注,毕竟原创不易。

posted @ 2022-02-07 17:11  hauner  阅读(1294)  评论(0编辑  收藏  举报