2016-11-28 54 views
1

我似乎無法獲得Sequelize以允許我將這些尷尬的數據發佈到我的postgres數據庫中。使用Sequelize/Node.js,我該如何將我的尷尬TEXT數據類型插入到postgres數據庫中?

我原本以爲這個問題是由於該文件的大尺寸,但我更新bodyParser允許100MB的數據。

***(下面的例子是整個文件,這通常是幾百字的純粹片段。)

這個數據需要被張貼到我的數據庫AS IS,所以沒有正則表達式並沒有重新格式化。

如下例所示,或者當試圖用引號包裝數據時,我收到錯誤'SequelizeValidationError:string violation:數據不能是數組或對象'。

當嘗試使用bodyParser.text()代替時,我收到錯誤「SequelizeValidationError:notNull違規:數據不能爲空」。

這裏是我收到並試圖張貼到我的數據庫中的數據的一個例子:

{ 
    "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; 
}; 

這是帖子的路線:

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文件:

app.use(methodOverride('_method')); 
app.use(logger('dev')); 
app.use(bodyParser.json({limit: '100mb'})); 
app.use(bodyParser.urlencoded({ limit: '100mb', extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

到目前爲止,我已經嘗試將我的消息模型中的數據類型從TEXT更改爲JSON更改爲BLOB,但是這些更改導致了相同的問題。

任何幫助非常感謝!

回答

0

如果這是正確有效的JSON,你可能想看看下面的Sequelize類型:

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

或者

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

隨着PostgreSQL的正確類型:

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

有關JSON領域的另一個真棒值得注意的是,它像本身並沒有一個-SQL數據庫樣的處理,所以你可以做一些很酷的查詢領域本身。

編輯: 另外,我注意到你仍然有與JSON的問題太多;在嘗試存儲對象之前,請務必先對JSON進行綁定,這一點很重要。這可能是問題的根源,因爲它不想存儲對象,而是存儲對象的文本表示。

+0

Doh!是。 JSON.Stringify。我會給你一個鏡頭。謝謝! – jmoneygram

相關問題