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

  好了,就先說到這里,歡迎大家留言和點贊關注,畢竟原創不易。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM