Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 对任何查找查询进行续集崩溃_Node.js_Sequelize.js - Fatal编程技术网

Node.js 对任何查找查询进行续集崩溃

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

我有一个使用sequelize的全新节点应用程序,但它不允许我运行一个查询

我试图
查找
任何东西,但它就是不起作用:

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,这促使我更仔细地观察它。