วันอาทิตย์ที่ 13 พฤษภาคม พ.ศ. 2561

Commit 8 Nodejs Wordbucket : install sequelize and sequelize-cli

Nodejs : Wordbucket GitHub Link

Commit 8 Nodejs Wordbucket : install sequelize and sequelize-cli

Commits on May 1, 2018

ต่อจากที่เพื่อนทำมา (เป็น webapp คล้าย todo list ที่ผมส่งให้เพื่อนลองทำ (link) แค่เปลี่ยนคำว่า list เป็น word)

ซึ่ง packet เสริมทั้งหมดที่ใช้ โดยมี express เป็น framework หลักของ webapp.

"dependencies": {
"body-parser": "^1.18.2",
"chai": "^4.1.2",
"chai-http": "^4.0.0",
"ejs": "^2.5.9",
"express": "^4.16.3",
"express-fileupload": "^0.4.0",
"fast-csv": "^2.4.1",
"json2csv": "^4.1.2",
"mocha": "^5.1.1",
"request": "^2.85.0",
"selenium": "^2.20.0",
"selenium-webdriver": "^4.0.0-alpha.1",
"sequelize": "^4.37.7",
"sequelize-cli": "^4.0.0",
"sqlite3": "^4.0.0"
},
"devDependencies": {
"supertest": "^3.0.0"
}
}

โดย orm ที่ใช้ คือ sequelize โดยถ้าเราใช้งานแบบง่ายโดยใช้ sequelize-cli

โดยเมื่อลง sequelize-cli จะมี 4 folder ปรากฏขึ้น คือ config, migrations, models และ seeders


  • config ตั้งค่าต่างๆของ sequelize
  • migrations สร้างไฟล์ migration กำหนดค่าต่างๆ ก่อนสร้างตาราง
    • ซึ่งสามารถสร้าง file migration แบบง่ายโดยสั่งใน commandline ได้เช่นกัน หรือ ถ้าต้องการ set อย่างละเอียดก็สามารถสร้างขึ้นมาเองได้เช่นกัน
  • models ไว้ import data ต่างๆใน database มาใช้ (เสมือนการ route เส้นทาง)
  • seeders (ไม่ได้ใช้) ให้สร้าง object ลงตารางจาก cmd ได้
ตัวอย่างคำสั่ง


- node_modules/.bin/sequelize model:generate --name User --attributes firstName:string,lastName:string,email:string
: สร้าง migration file และ model อัตโนมัติ โดยมี ชื่อว่า User มี 3 attributes คือ firstName , lastName และ email เป็น string ทั้งหมด

- node_modules/.bin/sequelize db:migrate
: ทำการ migrate สร้าง database

- node_modules/.bin/sequelize db:migrate:undo
: undo migrate ทั้งหมด(ใช้ตอนแก้ใช้ migration file แล้วทำการ migrate ใหม่ ต่างจาก django ที่ makemigration ดูการเปลี่ยนแปลง แล้ว migrate ต่อได้เลย)



config/config.json

- ตั้งค่าพื้นฐานของ database ของเรา โดยตอนแรกจะกำหนดเป็น mysql และ database ชื่อ 127.0.0.1 มาให้ และค่าอื่นตาม code ด้านล่าง

@@ -0,0 +1,23 @@
+{
+ "development": {
+ "username": "root",
+ "password": null,
+ "database": "database_development",
+ "host": "127.0.0.1",
+ "dialect": "mysql"
+ },
+ "test": {
+ "username": "root",
+ "password": null,
+ "database": "database_test",
+ "host": "127.0.0.1",
+ "dialect": "mysql"
+ },
+ "production": {
+ "username": "root",
+ "password": null,
+ "database": "database_production",
+ "host": "127.0.0.1",
+ "dialect": "mysql"
+ }
+}

models/index.js

- ไฟล์พื้นฐานการเรียกใช้ models ต่างๆของเรา โดยสามารถ import database ต่างๆมาใช้ได้ใน index.js ของเรา

@@ -0,0 +1,36 @@
+'use strict';
+
+var fs = require('fs');
+var path = require('path');
+var Sequelize = require('sequelize');
+var basename = path.basename(__filename);
+var env = process.env.NODE_ENV || 'development';
+var config = require(__dirname + '/../config/config.json')[env];
+var db = {};
+
+if (config.use_env_variable) {
+ var sequelize = new Sequelize(process.env[config.use_env_variable], config);
+} else {
+ var sequelize = new Sequelize(config.database, config.username, config.password, config);
+}
+
+fs
+ .readdirSync(__dirname)
+ .filter(file => {
+ return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
+ })
+ .forEach(file => {
+ var model = sequelize['import'](path.join(__dirname, file));
+ db[model.name] = model;
+ });
+
+Object.keys(db).forEach(modelName => {
+ if (db[modelName].associate) {
+ db[modelName].associate(db);
+ }
+});
+
+db.sequelize = sequelize;
+db.Sequelize = Sequelize;
+
+module.exports = db;



ไม่มีความคิดเห็น:

แสดงความคิดเห็น