使用quelize/node.js,如何将尴尬的文本数据类型插入Postgres数据库中



我似乎无法续集以允许我将此尴尬的数据发布到我的Postgres db中。

我最初认为问题是由于文件的大尺寸,但是我更新了BodyParser,以允许100MB的数据。

***(下面的示例仅是整个文件的片段,通常为几百个字符。)

此数据需要按原样发布到我的数据库中,因此没有正则重新格式。

如下示例中所述或尝试将数据包裹在引号中时,我会收到错误," sequelizeValidationError:string affarcation:string aforcation:data不能是数组或对象"。

尝试使用BodyParser.Text()而不是收到错误的" seqelizevalidationError:notnull违规:数据不能为null"。

这是我收到的数据的示例,并试图将其发布到我的DB:

{
  "data": {"message":{"$":{"version":"CiVI1122","release":"5","xmlns":"http://www.messages.com/messaging"},"header":[{"recipients":[{"to":[{"_":"myname@cutting.cert.messaging.com","$":{"Qualifier":"MESSAGE","FriendlyName":"Joe"}}]}],"from":[{"_":"bob@bob.messag-cert.com","$":{"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')));

到目前为止,我已经尝试将消息模型中的数据类型从文本更改为JSON,但是这些更改导致了同一问题。

任何帮助都非常感谢!

如果有效的JSON,您可能需要检查以下续集类型:

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

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

以及PostgreSQL的适当类型:

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

关于JSON字段的另一个很棒的注释是,它本身就是一种将其视为无-SQL数据库,因此您可以将一些很酷的查询在字段中进行。

编辑:另外,我注意到您仍然对JSON遇到问题。重要的是,您必须在尝试存储该对象之前对该对象进行扫描。这可能是问题的完整根源,因为它不想存储对象,而是对象的文本表示。

相关内容

  • 没有找到相关文章

最新更新