在任何查询查询上崩溃

我有一个全新的Node应用程序使用sequelize,但它不会让我运行一个单一的查询。

我试图find任何东西,它只是不工作:

 var models = require('./models'); models.User.findById(1, { logging: console.log }) 

每查询查询结束显示完全相同的错误。 数据库已被迁移并播种。 我通过打开它来validation,并有一堆用户。

这是我的模型:

 // user.js 'use strict'; module.exports = function(sequelize, DataTypes) { var User = sequelize.define('User', { email: DataTypes.STRING, name: DataTypes.STRING }, { classMethods: { associate: function(models) { // associations can be defined here User.belongsToMany(models.Group, {through: 'Membership'}) } } }); return User; }; 

堆栈跟踪:

 Executing (default): SELECT `id`, `email`, `name`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 1; /node_modules/sqlite3/lib/trace.js:28 throw err; ^ TypeError: date.indexOf is not a function at DATE.parse (/node_modules/sequelize/lib/dialects/sqlite/data-types.js:28:14) at /node_modules/sequelize/lib/dialects/sqlite/query.js:170:36 at /node_modules/lodash/lodash.js:12572:23 at /node_modules/lodash/lodash.js:4361:15 at baseForOwn (/node_modules/lodash/lodash.js:2622:24) at Function.mapValues (/node_modules/lodash/lodash.js:12571:7) at /node_modules/sequelize/lib/dialects/sqlite/query.js:134:32 at Array.map (native) at Statement.afterExecute (/node_modules/sequelize/lib/dialects/sqlite/query.js:133:39) --> in Database#all('SELECT `id`, `email`, `name`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`id` = 1;', [], [Function]) at /node_modules/sequelize/lib/dialects/sqlite/query.js:241:36 at Promise._execute (/node_modules/bluebird/js/release/debuggability.js:272:9) at Promise._resolveFromExecutor (/node_modules/bluebird/js/release/promise.js:473:18) at new Promise (/node_modules/bluebird/js/release/promise.js:77:14) at executeSql (/node_modules/sequelize/lib/dialects/sqlite/query.js:103:19) at tryCatcher (/node_modules/bluebird/js/release/util.js:16:23) at Promise._settlePromiseFromHandler (/node_modules/bluebird/js/release/promise.js:502:31) at Promise._settlePromise (/node_modules/bluebird/js/release/promise.js:559:18) at Promise._settlePromise0 (/node_modules/bluebird/js/release/promise.js:604:10) at Promise._settlePromises (/node_modules/bluebird/js/release/promise.js:683:18) at Promise._fulfill (/node_modules/bluebird/js/release/promise.js:628:18) at MappingPromiseArray.PromiseArray._resolve (/node_modules/bluebird/js/release/promise_array.js:125:19) at MappingPromiseArray._promiseFulfilled (/node_modules/bluebird/js/release/map.js:97:18) at Promise._settlePromise (/node_modules/bluebird/js/release/promise.js:564:26) at Promise._settlePromise0 (/node_modules/bluebird/js/release/promise.js:604:10) 

编辑:如果我注释掉堆栈中的最上面的项目(这是一个向后兼容的东西),它工作正常…. ???????????? 请告诉我,我并不疯狂。

请注意,createdAt和updatedAt默认声明为Sequelize.DATE

如果你使用的数据库是mysql / sqlite,那应该基本上是一个datestring,正如你在文档中看到的那样。

在过去,当我使用Date.now()返回一个数字时间戳的条目为我的数据库Date.now()了字段createdAt和updatedAt时,我得到了同样的错误:

 'use strict'; module.exports = { up: function (queryInterface, Sequelize) { return queryInterface.bulkInsert('Pokemons', [ {name: 'bulbasaur', createdAt: Date.now(), updatedAt: Date.now()},/*...*/ ]); }, /*...*/ }; 

要解决该问题,请将其更改为将返回datestring的new Date()

 'use strict'; module.exports = { up: function (queryInterface, Sequelize) { return queryInterface.bulkInsert('Pokemons', [ {name: 'bulbasaur', createdAt: new Date(), updatedAt: new Date()},/*...*/ ]); }, /*...*/ }; 

也许这就是你的情况。