項目獨立提供服務接口,可做爲先後端分類提供良好的解決方案vue
node -v 8.4.0 npm -v 5.3.0 npm2 -v 3.5.1
. ├─auto //sequelize-auto 自動生成 models實體類 └─src | main.js //入口文件 | router.js // controller 入口 | ├─config //配置文件 ├─controller //api層 ├─models // 實體類 ├─utils //工具類 └─validator //參數校驗器
git https://github.com/shanyanwt/koa_vue_blog.git npm install 開發環境 npm run dev localhost:8081 生產環境 npm run build //生成app.js npm run pm2 localhost:8081
supervisor -w src ,添加須要監聽的文件,默認是所有可是有時不起做用,加上監聽的文件便可node
sequelize 鏈接mysql
sequelize 安裝 $> npm i sequelize mysql mysql2 --save-dev
建立鏈接
var Sequelize = require('sequelize'); var sequelize = new Sequelize(dbName, dbUser, dbPas, { host: dbHost, dialect: 'mysql', pool: { max: 5, min: 0, idle: 10000 }, define: { timestamps: false //關閉時間戳 } }) //測試鏈接 sequelize.authenticate().then(() => { // 鏈接成功 }).catch(err => { //在這裏能夠添加郵箱通知 });
sequelize wikimysql
方法名 | 屬性 | 返回結果 | |
---|---|---|---|
create | 添加 | return 所添加信息 Object | |
bulkCreate | 批量添加 | return 所添加信息 Array | |
findOne | 查詢單條 | return Object | |
findByPk | 根據主鍵查詢 | return Object | |
findAll | 查詢 | return Array | |
findAndCountAll | 分頁查詢 | return Object -> count:Number,rows:Array | |
update | 更新 | return 1 or 0 Number | |
destroy | 刪除 | return 1or 0 Number | |
max('age') | 計算最大 | return Object | |
min('age') | 計算最小 | return Object | |
sum('age') | 計算總和 | return Object | |
count | 查詢條數 | return 1or 0 Number | |
query | 原始sql查詢 | return Object |
sequelize屬性方法 wikiwebpack
方法名 | 屬性 | 備註 | |
---|---|---|---|
attributes:['id'] | 包含條件查詢 | 只查詢id | |
db.literal('star_number +1') |
自定義字符 | 不會轉義,可做爲sql執行 | |
db.transaction | 事物處理 | 可對批量操做進行事物處理,失敗自行pormise處理或者 throw new Error(), 自行回滾 |
ps: db是從modes中導出已鏈接庫的sequelizegit
models生成 可在auto 目錄中執行密令
1. 進入 auto文件夾輸入 $ node auto.js 2. 執行完 auto.js 會生成models及表實體類而且導出爲index.js
auto.js文件所執行命令,也可手動在終端輸入此命令
sequelize-auto -h "數據庫地址" -d "數據庫名" -u "用戶名" -x "密碼" -p "端口號" --dialect mysql -o "生成文件的路徑"
自定校驗傳入參數是否正確,錯誤將會返回錯誤 JSON message和keygithub
1.userValidator.jsweb
引入 const { XValidator, Rule } = require('../validator/validator.js'); /* 模擬用戶註冊規則 */ class RegisterValidator extends LinValidator { constructor() { super(); //鏈式校驗規則 this.name = [ new Rule('isNotEmpty', '暱稱不可爲空'), new Rule('isLength', '暱稱長度必須在2~10之間', 2, 10) ]; this.email = [ new Rule('isOptional'), new Rule('isEmail', '電子郵箱不符合規範,請輸入正確的郵箱') ]; this.password = [ // 自定義matches 方法 new Rule( 'matches', '密碼長度必須在6~22位之間,包含字符、數字和 _ ', /^[A-Za-z0-9_*&$#@]{6,22}$/ ) ]; this.confirm_password = new Rule('isNotEmpty', '確認密碼不可爲空'); } /* 自定義 calidate 校驗規則 必須以 calidate開頭的一個方法, data是傳入參數 成功是 返回true 錯誤 ConfirmPassword */ validateConfirmPassword(data) { if (!data.body.password || !data.body.confirm_password) { return [false, '兩次輸入的密碼不一致,請從新輸入']; } let ok = data.body.password === data.body.confirm_password; if (ok) { return ok; } else { return [false, '兩次輸入的密碼不一致,請從新輸入']; } } } module.exports = { RegisterValidator };
const { RegisterValidator } = require('./userValidator.js'); const testRegister = async ctx => { //調用 RegisterValidator // 校驗合法繼續向下走 ,不可發則拋出異常 throw Error() const v = await new RegisterValidator().validate(ctx); /* v 返回 body, query ,params,header請求參數 鏈式取值 能夠防止多層對象無結值的錯誤 */ // post取值 var name = v.get('body.user.index.items.name') // get取值 var getName = v.get('query.name') /**.不合法將會返回 { "error_code": 20001, "error_message": { "name": "暱稱不可爲空", "password": "密碼長度必須在6~22位之間,包含字符、數字和 _ ", "confirm_password": "確認密碼不可爲空", "ConfirmPassword": "兩次輸入的密碼不一致,請從新輸入" } } */ }
生產環境 centos 7 以及上述全部依賴
全局安裝 npm install pm2 -g $ pm2 -v > 3.5.1 配置 pm2.conf.json 打印日誌輸出文件 "out_file": "./out.log", "error_file": "./out.log" "instances": 2 //打開多任務做爲負載均衡
build 生成app.js webpack打包方案sql
npm run build
安裝依賴數據庫
npm install
pm2 服務部署npm
$ npm run pm2 //啓動服務 ps: 確保已安裝,上述依賴 $ npm install pm2 -g
$ pm2 list //查看已運行服務
$pm2 logs //查看服務日誌
$ pm2 stop 0 //中止響應的進程
ps: 在此服務已經發布完成,能夠根據服務器 ip:8081調用,在次更新只需把打好的app.js上傳服務器,重啓便可