做前端的,在node出現後開始做類似後台類的操作,對於怎麼運算元據庫剛開始還是很慌的,找到乙個工具orm,遮蔽底層的具體實現,只通過相應的物件類操作完成資料庫操作,這邊選定sequelize。當然是用免費的mysql資料庫咯。
首先肯定是根據需求在資料庫建好相應的資料庫以及資料表,然後用sequelize-auto將資料表生成基本的model物件,用於生成model的檔案generate_model.js可以這麼寫
const seqauto = require('sequelize-auto')
const path = require('path')
const tables = process.argv.slice(2)
if (tables.length === 0)
const auto = new seqauto('database', 'username', 'password', ,
tables: tables
})auto.run(err =>
console.log('\n\nprocess completed successfully.')
console.log('you may need to add these foreign keys mannually:\n', auto.foreignkeys)
})
執行node generate_model table_name,即可在generate資料夾下,生成對應的model檔案,這裡以package資產包錶為例
/* jshint indent: 1 */
module.exports = function(sequelize, datatypes) ,
product_id: ,
name: ,
dept: ,
type: ,
pack_date: ,
portfolio:
}, );
};
這些只是單純的資料結構,以及一些字段要求和主鍵類關係,但是一張表可能和另一張表存在關係等,需要對該model進行一些豐富,改良之後的樣子暫時稱之為schema大概是這樣
import from '../enum'
import packageprops from '../props/package'
import _ from 'lodash'
import moment from 'moment'
// getter setter and pseudo properties are manually amend.
// do not overwrite all these context!
export default (sequelize, datatypes) => ,
product_id: ,
name: ,
dept: ,
type: ,
pack_date:
},portfolio:
}, ,
_product_state () ,
_maker_time () ,
_pack_date ()
},tablename: 'package',
timestamps: false,
defaultscope: }},
scopes: }}
})// set the plural for model
packageinfo.plural = packageinfo.name + 's'
// tell models to export this as audit item
packageinfo.isaudititem = true
packageinfo.audititemidx = 1
packageinfo.propertykeys = packageprops
packageinfo.associate = models => )
// associate with package items
packageinfo.hasmany(models.mortgageitem, )
} packageinfo.hooks = models => )
})packageinfo.afterupdate(async (instance, options) =>
await models.packageinfoaudit.create(record, )
} else }})
if (!_.isnil(previnfo)) , )}}
})} return packageinfo
}
可以增加一些,資料庫中的資料字典值的輸出,定義表之間的關係,比如,基於乙個資產包只能建立乙個產品,乙個資產包下面可以有多個資產項,甚至,可以提前配置好鉤子,在該錶create或者update之後或者之前等進行相關的操作。定義scope作為某些查詢的預設條件等。
在理清各表之間的關係,建立好每個表對應的schema之後,就是將這些東西丟擲來用啦~
import fs from 'fs'
import path from 'path'
import sequelize from 'sequelize'
import config from '../config/db.json'
import log4js from 'log4js'
import modelprops from './props'
const logger = log4js.getlogger('models')
const dbconfig = config[process.env.node_env]
if (dbconfig === undefined)
const models = ,
packageitems: {},
packageitemsaudit: {}
}const schemas = fs.readdirsync(path.resolve(__dirname, './schemas'))
const sequelize = new sequelize(dbconfig.uri, costs $ms.`)
})// const sequelize = new sequelize('abs_es', 'root', '', costs $ms.`)
// })
schemas.foreach( schema => `)
models[model.name] = model
logger.info('[aes] model', model.name, 'is mounted')
if (model.isaudititem) else if (model.ispackageitem) else if (model.ispackageitemaudit)
})object.keys(models).foreach( name =>
if ('hooks' in model)
})export const gettransaction = async () =>
export const max = column =>
export default models
大概展示一下,每種操作的基本用法
let orderinfo = await models.packageinfo.scope(null).findbyid(package_id)
let packages = await models.packageinfoaudit.findall(,
order: [ ['pack_date', 'desc'] ]
})packages = json.parse(json.stringify(packages))
const record = await models.productinfo.create(productdata, ,,]
})const newrecord = await ctx.state.records.product.update(, _.merge(, txno))
const record = await models.packageinfo.findone(,
include: ,
lock: txnlocks.update
})try , txno)
await txn.commit()
// await txn.rollback()
return ctx.success('資產包刪除成功,等待審核')
} catch (err)
throw err
}
Linux下安裝node的問題
sudo cp node usr local bin sudo cp npm usr local npm 這樣安裝之後,node是可以正常使用了.使用node v也可以正常的輸出的版本號.但是我使用 npm的時候,卻失敗了.module.js 327 throw err error cannot f...
node在centos下的安裝
node的安裝需要依賴很多,如gcc等,首先我們需要將這些安裝成功,用rpm命令檢視下,果然我們並沒有gcc等,所以要用yum進行安裝 yum y install gcc gcc c kernel devel cd usr local src wget 2 解壓原始碼 刪除安裝包 tar zxvf ...
windows環境下安裝node的canvas模組
之前系統用的是win10,曾經安裝成功,但是過程中由於安裝node gyp的編譯環境安裝了visual studio導致c盤爆滿,不得已重灌系統,再次安裝win10,但是第二次的安裝卻並不順利,npm在win10下問題一大堆,一度想要破費換個mac,最後換裝win7,不得不說win7穩定得多 具體請...