2016-11-27 20 views
1

Node + Postgresアプリケーションで作業していますが、Sequelizeモデルスキーマを使用してDataType.ARRAYを設定する際に問題があります。ここでSequelize-Postgresエラー:values.mapが関数ではありません

は私のモデルスキーマは、私はAPIをテストするために郵便配達を使用し、ここで私は、サーバーにデータをPOSTする方法で、ここで enter image description here は、ノードのコンソール上のエラートレースで、

var ArtistRoles = sequelize.define('ArtistRoles', { 
    id:{ 
     primaryKey: true, 
     type: DataTypes.UUID, 
     defaultValue: DataTypes.UUIDV1 
    }, 
    name:{ 
     type: DataTypes.STRING, 
     allowNull: false 
    }, 
    tags: { 
     type: DataTypes.ARRAY(DataTypes.STRING), 
     defaultValue: [] 
    } 
    },{ 
    hooks:{ 
     beforeCreate: function (role, options) { 
     //role.tags = JSON.stringify(role.tags); 
     console.log(role.tags); 
     } 
    }, 
    classMethods: { 
     associate: function (models) { 
     // add relations model relations here 
     //ArtistRoles.belongsTo(models.Artists); 
     } 
    } 
    }); 

です。

TypeError: values.map is not a function 
    at ARRAY.BaseTypes.ARRAY.$stringify (~/PROJECTS/my-api/node_modules/sequelize/lib/dialects/postgres/data-types.js:385:33) 
    at ARRAY.ABSTRACT.stringify (~/PROJECTS/my-api/node_modules/sequelize/lib/data-types.js:77:17) 
    at Object.escape (~/PROJECTS/my-api/node_modules/sequelize/lib/dialects/abstract/query-generator.js:967:32) 
    at Object.insertQuery (~/PROJECTS/my-api/node_modules/sequelize/lib/dialects/abstract/query-generator.js:299:28) 
    at QueryInterface.insert (~/PROJECTS/my-api/node_modules/sequelize/lib/query-interface.js:497:33) 
    at .<anonymous> (~/PROJECTS/my-api/node_modules/sequelize/lib/instance.js:672:56) 
    at tryCatcher (~/PROJECTS/my-api/node_modules/bluebird/js/release/util.js:16:23) 
    at Promise._settlePromiseFromHandler (~/PROJECTS/my-api/node_modules/bluebird/js/release/promise.js:510:31) 
    at Promise._settlePromise (~/PROJECTS/my-api/node_modules/bluebird/js/release/promise.js:567:18) 
    at Promise._settlePromise0 (~/PROJECTS/my-api/node_modules/bluebird/js/release/promise.js:612:10) 
    at Promise._settlePromises (~/PROJECTS/my-api/node_modules/bluebird/js/release/promise.js:691:18) 
    at Async._drainQueue (~/PROJECTS/my-api/node_modules/bluebird/js/release/async.js:138:16) 
    at Async._drainQueues (~/PROJECTS/my-api/node_modules/bluebird/js/release/async.js:148:10) 
    at Immediate.Async.drainQueues (~/PROJECTS/my-api/node_modules/bluebird/js/release/async.js:17:14) 
    at runCallback (timers.js:637:20) 
    at tryOnImmediate (timers.js:610:5) 
POST /api/1.0/role 500 46.114 ms - 45 

どのような理由が考えられますか?助けてください。

+0

あなたの 'data-types.js'を共有できますか?または385行目の少なくともいくつかの行? –

答えて

0

application/x-www-form-urlencodedの場合、サーバーに送信されるHTTPメッセージの本文は、本質的に1つの巨大なクエリ文字列です。

したがって、タグの値は、バックエンドで受信すると文字列形式になります。 これをバックエンドの配列型に変換してください。

0

私の答えは遅いと知っていますが、私のテストが合格していても、この同じ問題がありました。リンクのダイアグラムに表示されているキーと同じ名前のキーを使用して、配列値を別のキー値として書き込む必要があることに気付きました。

Postman Key-Value

ポストマンは、配列のみを受信するアレイとSequelize Postgresの配列データ型と同じ名前のキーを返します。私はdata-types.jsファイルを見直してこれを認識しました。

ただし、郵便番号に1つの値しか入力されていない場合は、通常の文字列として返され、Sequelizeはそれを拒否します。 Sequelizeは値を文字列として@mdsadiqとして送信しています。バックエンドの配列に変換し直すか、複数のキー値を入力することができます。いずれにしても、その値から配列を作成するbeforeCreateフックを追加するか、Sequelizeはイメージの作成時にそれを拒否します。

Before Create Hook

私は同じことが、配列文字列のために行く、あなたは、データベースに送信する前にフックでそれを変換することができますね。私はフロントエンドでまだフォームを使って実装していないので、それがどのように再生されるのか分かりません。私はこれが誰かを助け、訂正が高く評価されることを願っています。

関連する問題