- 今天想着研究一下nodejs是否有像C#中freesql那样的数据库实体映射,来解决数据库字段手动更新操作,然后网上一搜索就找到了使用sequelize这个库来解决。
- 刚开始研究一个新东西并不是一帆风顺的,在网上找到相关的示例代码,都码完了,然后点击运行,结果报错了!
const {Sequelize} = require('sequelize');
const cfg = require('./configuration');
const db = cfg.db;
console.log(db);
const sequelize = new Sequelize(db.database, db.user, db.password, {
host: db.host,
port: db.port,
dialect: db.dialect,
logging: true, // logging: true, 打印sql到控制台
timezone: '+08:00', //时间上的统一,这里是东八区,默认为0时区
define: { //全局的定义,会通过连接实例传递
pool: { // 使用连接池
max: 5, // 连接池中最大连接数量
min: 0, // 连接池中最小连接数量
acquire: 30000,
idle: 10000 // 如果一个线程 10 秒钟内没有被使用过的话,那么就释放线程
},
}
});
sequelize.authenticate().then(()=>{
console.log('数据库连接成功');
require('./models/tbl_fruit_define').define(sequelize).then(r => {});
})
module.exports = {}
报错
D:\Project\nodejs\nodejs-express-demo\node_modules\mysql2\node_modules\lru-cache\dist\cjs\index.js:359
#initializeTTLTracking() {
^
SyntaxError: Unexpected 'token' '('
at wrapSafe (internal/modules/cjs/loader.js:1071:16)
at Module._compile (internal/modules/cjs/loader.js:1121:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1177:10)
at Module.load (internal/modules/cjs/loader.js:1001:32)
at Function.Module._load (internal/modules/cjs/loader.js:900:14)
at Module.require (internal/modules/cjs/loader.js:1043:19)
at require (internal/modules/cjs/helpers.js:77:18)
at Object.<anonymous> (D:\Project\nodejs\nodejs-express-demo\node_modules\mysql2\node_modules\lru-cache\dist\cjs\index-cjs.js:5:36)
at Module._compile (internal/modules/cjs/loader.js:1157:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1177:10)
经过测试验证,是在实例化new Sequelize
时候出了错。
刚开始猜测是node版本(v12.16.0)问题导致,但是看Sequelize官网说是支持node v10.0以上,所以避开node版本原因,后来经过一系列搜索和测试,找到是因为Sequelize其中使用的一个库mysql2的版本问题导致的,当时直接使用npm install -s mysql2
安装的默认最新版本(3.2.3),安装后就是出现上面那个错误,在https://juejin.cn/post/7123155989200633870这里看到使用npm install -g mysql2
安装mysql2,尝试安装,提示要使用node 16.14.0以上的,就猜测mysql2安装版本太新有问题,然后找到mysql2的历史版本,选了3.0.0通过npm install -s mysql2@3.0.0
局部安装。
然后就成功解决了,我也挺意外,尝试一次就OK了^o^,然后还尝试把3.0.0卸载,装上3.2.3重试了一下,重新出现了上面那个错,确定了一下错误原因。