好,會寫這一篇其實是因為我在 AWS 部署之前做過的 URL Shortener 專案時發生了問題,原因在於我原本是用 NoSQL 的 MongoDB 來管理資料,但既然要用 AWS 的 RDS 來託管資料勢必得更動原先專案裡的資料庫設定,所以咱就跑去學了 MySQL😐
Ok,要改動資料之前,要先來看看我之前是怎麼用 MongoDB 和它的 ODM Mongoose 來建立管理資料的資料庫的。首先,我們要管理的資料有:
在原先的 MongoDB 版本中,我先在 models/url.js 中建立資料的結構,長像這樣:
// 載入 mongoose
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const urlSchema = new Schema({
origin: {
type: String,
required: true
},
transfer: {
type: String
}
})
// 匯出資料型態
module.exports = mongoose.model('URL', urlSchema)
然後在 config/mongoose.js 中進行資料庫連線,像這樣:
// 載入 mongoose
const mongoose = require('mongoose')
// 僅在開發環境使用 dotenv
if(process.env.NODE_ENV !== 'production'){
require('dotenv').config()
}
// 連線到 mongoDB
mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true })
// 取得資料庫連線狀態
const db = mongoose.connection
// 連線異常
db.on('error', ()=>{
console.log('mongoDB error!')
})
// 連線成功
db.once('open', ()=>{
console.log('mongoDB connected!')
})
// 匯出連線狀態
module.exports = db
然後這些東西呢,等等到 MySQL 版就通通不需要囉,呵呵!
接下來,要來把資料管理改成 MySQL,在那之前要先把需要的東西安裝好。
drop database if exists url_shortener;
create database url_shortener;
use url_shortener;
npm install mysql2 sequelize sequelize-cli
該裝的都裝完了,來設定吧!
npx sequelize init
npx sequelize model:generate --name Url --attributes origin:string,transfer:string
npx sequelize db:migrate
select * from urls;
,看到類似下面這張圖就是成功了:// 引入資料庫設定
const db = require('../../models')
const Url = db.Url
// 更改原本的操作
router.post('/shortener', async (req, res)=>{
try{
const originUrl = req.body.url
const data = await Url.findOne({where: {origin: originUrl}})
if(data){
res.render('shortener', {transfer: data.transfer})
}else{
const shorterUrl = urlShortener()
Url.create({origin: originUrl, transfer: shorterUrl})
.then(() => res.render('shortener', { transfer: shorterUrl }))
.catch(error => console.log(error))
}
}catch (error){
console.log(error)
}
})
下篇回到 AWS 部署...www