mid-way框架歇盼,使用sequelize訪問數(shù)據(jù)庫嗓袱,dev模式正常臼朗,build之后奸披,所有數(shù)據(jù)訪問全部報錯昏名,錯誤信息類似于 Model not initialized: Member "訪問數(shù)據(jù)庫的sequelize函數(shù)名" cannot be called. "定義的sequelize數(shù)據(jù)Model實例名" needs to be added to a Sequelize instance.
解決方案:
sequelize的配置參數(shù)中,有一項是 modelPaths 阵面,該參數(shù)設(shè)置sequlize的model文件的路徑轻局,該設(shè)置使用通配符匹配項目的model文件,在dev(開發(fā)模式)配置中样刷,該配置是 [__dirname + /**.model.ts
]仑扑,__dirname=獲得當(dāng)前執(zhí)行文件所在目錄的完整目錄名,這個是Node.js自帶的置鼻,我的sequelize配置文件和model文件在同一個目錄下镇饮,所以這么寫。這個配置項在build模式下需要修改為[__dirname + /**.model.js
]
(ps:modelPaths 的這種寫法不是官方文檔推薦的寫法箕母,官方直接指定model路徑储藐,不帶文件后綴,會自動處理司蔬,不會出現(xiàn)這個問題邑茄。)
原理分析:
我用的midway框架是TypeScript,dev模式運行的是TypeScript文件(model文件后綴是ts)俊啼,但是build之后肺缕,TypeScript會編譯成JavaScript(model文件后綴是js),所以配置項如果不更改授帕,build模式會找不到 ts后綴的文件同木,引發(fā)上述錯誤。