背景
原本使用php寫的一個項目,隨着訪問量增大,性能出現問題,本來考慮將Php從5.6升級到7.3看能不能得到解決,但是看了一些文章,說node在這些方面更出色(我自己沒有驗證,邊寫邊驗證),加上自己前端方面更擅長,所以決定使用koa來重寫項目。正好把一些邊角料知識串了一串,這里把整個項目過程中遇到的問題記錄一遍。
1. 開發相關
a) koa
登錄
參考
// 使用koa-session
// 檢驗登錄
中間件處事能用功能
中間件一般就是對ctx做擴展,比如增加各種統一返回的處理函數。
我想直接擴展context的原型,這樣不用每個訪問都重新加載這些函數,於是我找到這個 擴展contex. 但在擴展中拿到運行時的實例(this)有些問題,待研究。
前后端分離
開發時使用nodemon起服務,部署時使用pm2. 在啟動程序時分別傳入環境變量區分,加載不同的前端資源即可:
b) sequelize
事務
sequelize支持事務,官方代碼如下:
return sequelize.transaction(t => {
// chain all your queries here. make sure you return them.
return User.create({
firstName: 'Abraham',
lastName: 'Lincoln'
}, {transaction: t}).then(user => {
return user.setShooter({
firstName: 'John',
lastName: 'Boothe'
}, {transaction: t});
});
}).then(result => {
// Transaction has been committed
// result is whatever the result of the promise chain returned to the transaction callback
}).catch(err => {
// Transaction has been rolled back
// err is whatever rejected the promise chain returned to the transaction callback
});
比較簡單明了。
坑爹的修改結果集
sequelize返回的結果集需要處理下讓接口返回,結果無論如何修改都不生效,氣爆炸,最后才發現原因它的結果集必須要用特定方法才能修改字段: setDataValue
mysql
- 時間格式(每種程序語言的時間都是個復雜的問題)
mysql有三種時間格式
// Date
// Datetime
// Timestamp
部署相關(先不關注)
項目達到部署使用有一系列問題需要解決,這里先記錄,再逐步解決
代碼壓縮
源碼推送
推送哪些內容?
pm2部署
npm install -g pm2
pm2 start app.js // 啟動
pm2 start app.js -i max //啟動 使用所有CPU核心的集群
pm2 stop app.js // 停止
pm2 stop all // 停止所有
pm2 restart app.js // 重啟
pm2 restart all // 重啟所有
pm2 delete app.js // 關閉