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; |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น