我想将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)存储和检索。
答案 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会自动为我做。