无法通过 Node.js 中的 Sequelize 从 DB 中选择数据

Posted

技术标签:

【中文标题】无法通过 Node.js 中的 Sequelize 从 DB 中选择数据【英文标题】:Unable to select data from DB via Sequelize in Node.js 【发布时间】:2015-11-16 13:18:00 【问题描述】:

为什么下面的代码给我一个错误?

var Sequelize = require('sequelize');
var sequelize = new Sequelize('schema', 'root', '');
var Foo = sequelize.define('Foo', 
  name: Sequelize.STRING
);
sequelize.sync().then(function() 
  Foo.create(
    name: 'some name'
  ).then(function() 
    Foo.findAll( where:  name:  $like: '%s%'   ).then(function(result) 
      console.log(result.rows.length);
    );
  );
);

输出

Executing (default): SELECT `id`, `name`, `createdAt`, `updatedAt` FROM `Foos` AS `Foo` WHERE `Foo`.`name` LIKE '%s%';
Unhandled rejection TypeError: Cannot read property 'length' of undefined
    at null.<anonymous> (E:\work\projects\src\preorders\server.js:13:30)
    at tryCatcher (E:\work\projects\src\preorders\node_modules\sequelize\node_modules\bluebird\js\main\util.js:26:23)
    at Promise._settlePromiseFromHandler (E:\work\projects\src\preorders\node_modules\sequelize\node_modules\bluebird\js\main\promise.js:507:31)
    at Promise._settlePromiseAt (E:\work\projects\src\preorders\node_modules\sequelize\node_modules\bluebird\js\main\promise.js:581:18)
    at Promise._settlePromises (E:\work\projects\src\preorders\node_modules\sequelize\node_modules\bluebird\js\main\promise.js:697:14)
    at Async._drainQueue (E:\work\projects\src\preorders\node_modules\sequelize\node_modules\bluebird\js\main\async.js:123:16)
    at Async._drainQueues (E:\work\projects\src\preorders\node_modules\sequelize\node_modules\bluebird\js\main\async.js:133:10)
    at Async.drainQueues (E:\work\projects\src\preorders\node_modules\sequelize\node_modules\bluebird\js\main\async.js:15:14)
    at process._tickCallback (node.js:419:13)

这是我的package.json 文件中的“依赖项”选项:

  "dependencies": 
    "mysql": "^2.9.0",
    "sequelize": "^3.13.0"
  

【问题讨论】:

【参考方案1】:

回调中的变量result 应该已经是一个结果数组,而不是一些包含行的对象。将其更改为此应该可以获得行数:

Foo.findAll( where:  name:  $like: '%s%'   ).then(function(result) 
  console.log(result.length);
);

转储所有数据,看看它是否真的是你想要的数据。

【讨论】:

【参考方案2】:

您的result 没有rows 属性。

【讨论】:

以上是关于无法通过 Node.js 中的 Sequelize 从 DB 中选择数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 TypeScript 在 Node.js 中进行 Sequelize - 没有“new”就无法调用类构造函数模型

Node JS中的权限

如何使用node.js控制sequelize中的内连接查询?

Node.js SQL数据库操作 (下)(ORM框架Sequelize模块及案例展示)

Node.js的ORM框架sequelize

[转]Node.JS使用Sequelize操作MySQL