2016-11-28 1 views
1

私はこの不気味なデータを私のpostgres DBに投稿できるようにSequelizeを取得できないようです。Sequelize/Node.jsを使用して、どうしたら厄介なTEXTデータ型をpostgresデータベースに挿入できますか?

私はもともとこの問題はファイルのサイズが大きいためだと考えましたが、100Mbのデータを許可するようにbodyParserを更新しました。

***(以下の例では、通常、数百文字で、ファイル全体の単なる抜粋です。)

このデータは、AS IS私のデータベースにポストする必要がないので、何の正規表現と無再フォーマット。

データを引用符で囲むと、「SequelizeValidationError:string violation:dataは配列またはオブジェクトではありません」というエラーが表示されます。

代わりにbodyParser.text()を使用しようとすると、 'SequelizeValidationError:notNull違反:データはnullにはなりません'というエラーが表示されます。ここで

は私が受信し、私のDBに投稿しようとしているデータの一例である:ここで

{ 
    "data": {"message":{"$":{"version":"CiVI1122","release":"5","xmlns":"http://www.messages.com/messaging"},"header":[{"recipients":[{"to":[{"_":"[email protected]","$":{"Qualifier":"MESSAGE","FriendlyName":"Joe"}}]}],"from":[{"_":"[email protected]","$":{"Qualifier":"MESSAGE","FriendlyName":"BOB"}}],"messageid":["68d3e5d7c97fb3"],"senttime":["2016-05-12T16:05:43.0000000Z"],"sendersoftware":[{"sendersoftwaredeveloper":["Bob'sSoftware"],"sendersoftwareproduct":["Bob's Integration"],"sendersoftwareversionrelease":["0.1"]}],"information":[{"given":["LOY"],"name":["SHMO"],"dob":["1949-04-01"],"gender":["M"],"zip":["77777"]}]}],"body":[{"message":[{"subject":["Message for: Shmo, Joe Sent: 2016-05-12T16:05:43.0000000Z"],"document":[{"plaintext":[""]}],"attachment":[{"documentname":["null"],"file":[{"documenttype":["application/pdf"],"documentdata":["JVBERi0xLjMNCjEgMCBvYmoNClsvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJXQ0KZW5kb2JqDQo3IDAgb2JqDQo8PCAvTGVuZ3RoIDIzNjkgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4gc3RyZWFtDQpYCa1a23LbyBF93yr/Q1flIbuJPJo7BnrZkiXH2pS3fBFj11Y2DxAxIhGDAAOA0jJf49f8ZXoGAAlKBHgRy1WUKII9p0+fvsyMX/3wH6CgQ0JBaU1CHoI2AREhFBa+QvYKP+chERAIRTjnII0hXGtghjBtVk+9GcH53wQwRsIwhNE9UCJUgK+aGnw1QkExAY1LcKZh9N4bpRICSQnDL8Tw4+0/3vz97dXoly9vf4LRv2H0F3g7evXDpzUC1DQolJUVPRg=="]}]}]}]}]}} 
} 

は私の「メッセージ」モデルである:ここでは

'use strict'; 

var dateFormat = require('dateformat'); 

module.exports = function(sequelize, DataTypes) { 
    var Surescript = sequelize.define('Message', { 
    data: { 
     type: DataTypes.TEXT, 
     allowNull: false 
    } 
    }, { 
    classMethods: { 
     associate: function(models) { 
     // associations can be defined here 
     } 
    }, 
    instanceMethods: { 
     insertDate: function() { 
     return dateFormat(this.createdAt, "dddd, mmmm dS, yyyy, h:MM TT") 
     } 
    } 
    }); 
    return Message; 
}; 

は私のPOSTルートであります:

0:

router.post('/', utils.auth, function(req, res, next) { 
    var currentUser = auth(req); 
    UserModel.findOne({ 
    where: { username: currentUser.name, password: currentUser.pass } 
    }).then(function(user) { 
    if (user.username == currentUser.name && user.password == currentUser.pass && user.admin == true) { 
     MessageModel.create({ 
     data: req.body.data 
     }) 
     res.send('POST'); 
    } 
    }) 
    .then(function() { 
    res.end(); 
    }) 
    .catch(function(err) { 
    res.sendStatus(401); 
    }); 
}); 

私はserver.jsファイルにこのコードを持っています

これまでのところ、メッセージモデルのデータ型をTEXTからJSONにBLOBに変更しようとしましたが、これらの変更によって同じ問題が発生しました。

何か助力が大変ありがとうございます。

答えて

0

それが適切に有効なJSONをなら、あなたは以下のSequelizeの種類をチェックアウトすることもできます。

http://docs.sequelizejs.com/en/v3/api/datatypes/json

やPostgreSQLで適切な型とともに

http://docs.sequelizejs.com/en/v3/api/datatypes/jsonb

https://www.postgresql.org/docs/9.4/static/datatype-json.html

JSONフィールドについてもうひとつ注目すべき点は、No-SQLデータベースのように扱われるということです。には、フィールド自体がになっています。

編集: また、JSONについてもまだ問題があることに気付きました。そのオブジェクトを格納しようとする前にJSON.stringifyすることが重要です。これはおそらく、オブジェクトを格納するのではなく、オブジェクトのテキスト表現を格納したいので、問題の完全な根本です。

+0

Doh!はい。 JSON.Stringify。私はそのショットを与えるでしょう。ありがとう! – jmoneygram

関連する問題