将手写笔存储在JSON / Document数据库中

时间:2018-02-05 15:06:59

标签: json node.js arangodb stylus

我想将Stylus存储在JSON中,所以它看起来像:

{
  "file": "main",
  "content:" "body
                  font: 12px Helvetica, Arial, sans-serif;

              a.button
                  -webkit-border-radius: 5px;
                  -moz-border-radius: 5px;
                  border-radius: 5px;"
}

但是我知道使用/ n存储是不可能的,我可以自动格式化标签/标识,以便可以从文档数据库(即MongoDB或ArangoDB)存储和检索。

2 个答案:

答案 0 :(得分:1)

另一个将文件内容存储为字符串属性值的示例,没有RegExp等(没有处理输入数据,它已经是UTF-8字符串):

const fs = require('fs');
const arangojs = require('arangojs');
const aql = arangojs.aql;

// Const variables for connecting to ArangoDB database
const host = '127.0.0.1'
const port = '8529'
const username = 'root' // default user
const password = '' // blank password by default
const database = '_system' // default database

 // Connection to ArangoDB
db = new arangojs.Database({
    url: `http://${host}:${port}`,
    databaseName: database
});
db.useBasicAuth(username, password); // authenticate

fs.readFile('assets/total.styl', 'utf-8', (error, content) => {
    if (error) {
        throw error;
    }
    db.query(aql`
        INSERT {
            name: "Total",
            type: "stylus",
            content: ${content}
        } INTO stylesheets
        RETURN NEW
    `).then(
        cursor => cursor.all()
    ).then(
        docs => docs.forEach(doc => console.log(doc)),
        err => console.error('Query failed:\n', err.response.body)
    );
});

产生的文件(系统属性遗漏):

{
  "name": "Total",
  "type": "stylus",
  "content": "{\r\n  \"file\": \"main\",\r\n  \"content:\" \"body\r\n                  font: 12px Helvetica, Arial, sans-serif;\r\n\r\n              a.button\r\n                  -webkit-border-radius: 5px;\r\n                  -moz-border-radius: 5px;\r\n                  border-radius: 5px;\"\r\n}"
}

引用RFC

  

<强> 2.5。字符串

     

字符串的表示是   类似于C中使用的惯例   编程语言家族。一个   字符串以引号开头和结尾   分数。所有Unicode字符都可以   放在引号内   除了必须的字符   逃脱:引号,反转   固体和控制字符   (U + 0000到U + 001F)。

     

任何字符可能被转义。

如果您的.styl文件包含此类字符......

00 01 02 03 04 05 06 07 08 09 10 5C 11 12 22 13

它们最终会在文档中正确编码:

{
  "name": "Total",
  "type": "stylus",
  "content": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\u0010\\\u0011\u0012\"\u0013"
}

答案 1 :(得分:0)

好的,经过我对ArangoDB进行的一些广泛研究后,你可以做到以下几点:

var removeSpace = content.replace(new RegExp(/(?:\r\n|\r|\n)/g, 'g'), '\n')

并且记住无需逃避\ n , 对于其他数据库,这不是必需的,因为这些数据库自动执行JSON.stringify传递的值。

示例:(假设DB变量保存数据库连接)

import IO from 'fs'
IO.readFile('assets/total.styl', 'utf8', function(error, content) {
  if(error) {
    throw error
  }
  var contentUpdated = content.replace(new RegExp(/(?:\r\n|\r|\n)/g, 'g'), '\n')
  console.log(contentUpdated)

  cursor = DB.query('INSERT { name: "Total",  type: "stylus", content: "' + contentUpdated + '"} INTO stylesheets RETURN NEW').then(
    console.log(cursor)
  )

})

最后,如上所述,您不需要更换任何东西,ArangoDB会自动为我做。