2016-05-11 6 views
1

私はsequelizeを使用して新しいNodeアプリケーションを持っていますが、1つのクエリを実行することはできません。任意の検索クエリで異常終了することを避ける

私はfind何にしようとしていると、それだけでは動作しません:

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) 

編集:私は(後方互換性のものである)スタック内の一番上の項目をコメントアウトした場合それは正常に動作します.... ???????????私は私が狂っていないと教えてください。

+0

DBテーブルに 'createdAt'と' updatedAt'フィールドが定義されていますか?そしてそれらは 'datetime'と定義されていますか? –

+0

これらのフィールドの両方が存在し、 'datetime'です – MishieMoo

答えて

1

createdAtとupdatedAtは、デフォルトでSequelize.DATEと宣言されています。

使用しているデータベースがmysql/sqliteの場合は、基本的に日付文字列になります(documentation参照)。

私はDate.now()を使用してエントリを自分のデータベースを播種したとき、私はフィールドcreatedAtとupdatedAtのために、数のタイムスタンプを返し、過去に同じエラーを得た:

'use strict'; 

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

それを修正するには、new Date()に変更し日付文字列を返します。

'use strict'; 

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

これはおそらくあなたの場合に起こっていることです。

+0

これは私にも起こりました。私の場合、SQLiteのSQLProは私の日付をタイムスタンプに変換していましたが、それをUIのテキストとして表示していました。私が気づいた唯一の理由は、 '2017/01/25'の代わりに' 2017/01/25'のような日付が表示され、私はそれをもっと近く見るようになったからです。 – claviska

関連する問題