logo头像
Snippet 博客主题

nodejs-koa2整合sequelize

本文于 706 天之前发表,文中内容可能已经过时。

概述

使用koa的sequelize查询数据的时候,用await的写法不能满足我的需求,我只要查询部分数据,并将数据库的表的列名从下划线改为驼峰,所以百度到sequelize的官网可以使用原始的sql语句。

正文

问题

使用koa的sequelize查询数据的时候,用await的写法:

1
2
3
4
5
6
7
(async () => {
var pets = await Pet.findAll({where: {name: "btluo" } });
console.log(`find ${pets.length} pets:`);
for (let p of pets) {
console.log(JSON.stringify(p));
}
})();

不能满足我的需求,我只要查询部分数据,并将数据库的表的列名从下划线改为驼峰,所以百度到sequelize的官网可以使用原始的sql语句。

https://itbilu.com/nodejs/npm/VkYIaRPz-.html#induction

解决方案

使用sequelize.query() - 执行查询:

1
2
3
4
5
6
sequelize.query("SELECT...").spread(function (results, metadata) {
// Raw query - use spread
});
sequelize.query("SELECT...", { type: sequelize.QueryTypes.SELECT }).then(function (results) {
// SELECT query - use then
})

来满足我的要求,但是我使用sequelize.query的时候

总是报错sequelize.query() is not a function,然后我发现找了好久,把sequelize重新装,更新到最新版本都会继续报这个错,然后重新把所有代码按sequelize的api文档的安装方法重新写了一个小demo,后面发现成功了。

我的博客图片

然后我又在项目上重新写了一遍发现还是继续报这个错,然后我重新检查了下代码,发现报错是发生再db.js(间接定义model那个js)上,没把sequelize给exports出去,

我的博客图片

导致如果直接调用sequelize.query()的时候会报错,所以我把db.js的sequelize放入导出对象中,

我的博客图片

再在index.js中引入db,再使用sequelize.query()就不会报错了。