【问题标题】:How to resolve SequelizeDatabaseError NaN when using sequelize?使用sequelize时如何解决SequelizeDatabaseError NaN?
【发布时间】:2018-11-01 13:25:02
【问题描述】:

为我的模型运行简单的 sequelize.js 查询时出现此错误。

Executing (default): CREATE TABLE IF NOT EXISTS `Books` (`id` INTEGER PRIMARY KEY, `title` VARCHAR(255), `author` VARCHAR(255), `genre` VARCHAR(255), `first_published` INTEGER);
Executing (default): PRAGMA INDEX_LIST(`Books`)
Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_books_1`)
Executing (default): CREATE TABLE IF NOT EXISTS `Patrons` (`id` INTEGER PRIMARY KEY, `first_name` VARCHAR(255), `last_name` VARCHAR(255), `address` VARCHAR(255), `email` VARCHAR(255), `library_id` VARCHAR(255), `zip_code` INTEGER);
Executing (default): PRAGMA INDEX_LIST(`Patrons`)
Executing (default): SELECT count(*) AS `count` FROM `Books` AS `Book`;
Executing (default): SELECT `id`, `title`, `author`, `genre`, `first_published` FROM `Books` AS `Book` ORDER BY `Book`.`title` LIMIT 0, 4;
GET /1 304 410.149 ms - -
GET /stylesheets/style.css 304 1.446 ms - -
Executing (default): SELECT count(*) AS `count` FROM `Books` AS `Book`;
Executing (default): SELECT `id`, `title`, `author`, `genre`, `first_published` FROM `Books` AS `Book` ORDER BY `Book`.`title` LIMIT NaN, 4;
Unhandled rejection SequelizeDatabaseError: SQLITE_ERROR: no such column: NaN
    at Query.formatError (C:\Users\user\Downloads\Sandbox\10\node_modules\sequelize\lib\dialects\sqlite\query.js:423:16)
    at afterExecute (C:\Users\user\Downloads\Sandbox\10\node_modules\sequelize\lib\dialects\sqlite\query.js:119:32)
    at replacement (C:\Users\user\Downloads\Sandbox\10\node_modules\sqlite3\lib\trace.js:19:31)
    at Statement.errBack (C:\Users\user\Downloads\Sandbox\10\node_modules\sqlite3\lib\sqlite3.js:16:21)

有趣的是代码运行良好,只是控制台在每次路由被命中时都会吐出上述错误。

我基本上有一个使用快速路由器的简单路由,它接受一个 id 参数。然后我使用 id 参数来计算 LIMIT 和 OFFSET 的一些值,以便在我的分页中使用。

在我看来查询被执行了两次,第二次偏移量是 NaN

第一次执行:

Executing (default): SELECT `id`, `title`, `author`, `genre`, `first_published` FROM `Books` AS `Book` ORDER BY `Book`.`title` LIMIT 0, 4;

第二次执行:

Executing (default): SELECT `id`, `title`, `author`, `genre`, `first_published` FROM `Books` AS `Book` ORDER BY `Book`.`title` LIMIT NaN, 4;

这是代码:

var express = require('express');
var router = express.Router();
var Book = require('../models').Book;


router.get('/:page', function (req, res, next) {
    Book.findAndCountAll({
        order: [ ['title'] ],
        offset: ((req.params.page - 1) * 4),
        limit: 4
    }).then(function (book) {
        let pages = Math.ceil(book.count / 4);
        res.render('index', {
            content: book.rows,
            pagination: pages,
            title: 'Express'
        });
    });
});

【问题讨论】:

  • 你能发布两个请求的req.params.page 的值是多少吗?

标签: node.js express sqlite pagination sequelize.js


【解决方案1】:

req.params.page 转换为number 使用类似这样的方法:+req.params.page 在减法和乘法之前。默认情况下,params 对象包含 string 值 (API)。

【讨论】:

  • 做到了,我最终还做了 2 个额外的步骤。我添加了一个 catch() 并修复了 favicon 错误。
猜你喜欢
  • 2017-03-02
  • 2015-05-25
  • 2020-07-11
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
  • 2021-12-03
相关资源
最近更新 更多