Node.js 对任何查找查询进行续集崩溃
我有一个使用sequelize的全新节点应用程序,但它不允许我运行一个查询 我试图Node.js 对任何查找查询进行续集崩溃,node.js,sequelize.js,Node.js,Sequelize.js,我有一个使用sequelize的全新节点应用程序,但它不允许我运行一个查询 我试图查找任何东西,但它就是不起作用: var models = require('./models'); models.User.findById(1, { logging: console.log }) 每次find查询都会显示完全相同的错误。数据库已迁移并已设定种子。我打开它进行了验证,里面有很多用户 这是我的模型: // user.js 'use strict'; module.exports = functi
查找任何东西,但它就是不起作用:
var models = require('./models');
models.User.findById(1, { logging: console.log })
每次find
查询都会显示完全相同的错误。数据库已迁移并已设定种子。我打开它进行了验证,里面有很多用户
这是我的模型:
// 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,那么它基本上应该是一个日期字符串,如图中所示
在过去,我使用Date.now()
(返回数字时间戳)为createdAt和updatedAt字段的条目为数据库设定种子时遇到了相同的错误:
'use strict';
module.exports = {
up: function (queryInterface, Sequelize) {
return queryInterface.bulkInsert('Pokemons', [
{name: 'bulbasaur', createdAt: Date.now(), updatedAt: Date.now()},/*...*/
]);
},
/*...*/
};
要解决此问题,请将其更改为newdate()
,这将返回一个日期字符串
'use strict';
module.exports = {
up: function (queryInterface, Sequelize) {
return queryInterface.bulkInsert('Pokemons', [
{name: 'bulbasaur', createdAt: new Date(), updatedAt: new Date()},/*...*/
]);
},
/*...*/
};
也许这就是你的情况 数据库表是否定义了createdAt
和updatedAt
字段?它们是否被定义为datetime
?是的,这两个字段都存在并且都是datetime
,这也发生在我身上。在我的例子中,SQLPro for SQLite将我的日期转换为时间戳,但仍然在UI中显示为文本。我注意到的唯一原因是日期看起来像2017/01/25,而不是2017-01-25,这促使我更仔细地观察它。