我正在尝试将字符串的内容写入node.js 中的文件中
我有一些 raml 文件,我可以加入它们。如果我在控制台中打印变量,我会看到它被很好地解析,但是一旦我保存在文件中,该文件只包含一行:
var raml = require('raml-parser');
var fs = require('fs');
var path = require('path');
var os = require('os')
path.join(__dirname, './')
raml.loadFile('schema.raml').then( function(data) {
console.log(data);
var filePath = "schema.raml";
fs.unlinkSync(filePath);
fs.writeFile("./new.raml", JSON.stringify(data).replace('/\n', os.EOL), function(err) {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
}, function(error) {
console.log('Error parsing: ' + error);
});
Run Code Online (Sandbox Code Playgroud)
我添加了替换 EOL 来更改文件中的所有“\n”。如果我删除它,文件将在每一行末尾包含“\n”。
在控制台上,这是输出:
{ title: 'RAML Flattener',
baseUri: 'http://github.com/joeledwards/node-flat-raml',
version: '1',
mediaType: 'application/json',
protocols: [ 'HTTP' ],
resources:
[ { relativeUri: '/base',
methods: [Object],
resources: [Object],
relativeUriPathSegments: [Object] } ] }
Run Code Online (Sandbox Code Playgroud)
data是一个 JavaScript 对象;当你它如何显示时,console.log()它与它如何最终出现在你正在编写的文件中没有太大关系。
问题是您正在使用JSON.stringify(),默认情况下,它不会漂亮地打印输出字符串。
相反,试试这个:
JSON.stringify(data, null, 2)
Run Code Online (Sandbox Code Playgroud)
这将使您的输出如下所示:
{
"title": "RAML Flattener",
"baseUri": "http://github.com/joeledwards/node-flat-raml",
"version": "1",
"mediaType": "application/json",
"protocols": [
"HTTP"
],
"resources": [
{
"relativeUri": "/base",
"methods": { ... },
"resources": { ... },
"relativeUriPathSegments": { ... }
}
]
}
Run Code Online (Sandbox Code Playgroud)
您可能需要也可能不需要调用.replace()其输出。如果您这样做,请使用此(您使用的无效):
.replace(/\n/, os.EOL)
Run Code Online (Sandbox Code Playgroud)