node下的orm類sequelize的使用

2021-08-21 13:57:35 字數 4367 閱讀 4191

做前端的,在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穩定得多 具體請...