3

我正在尝试在 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);
    });

我添加了一个替换 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] } ] }
4

1 回答 1

4

data是一个 Javascript 对象;当您console.log()与它在您正在编写的文件中的结束方式没有太大关系时,它是如何显示的。

问题是您正在使用JSON.stringify(),默认情况下,它不会漂亮地打印输出字符串。

相反,试试这个:

JSON.stringify(data, null, 2)

这将使您的输出如下所示:

{
  "title": "RAML Flattener",
  "baseUri": "http://github.com/joeledwards/node-flat-raml",
  "version": "1",
  "mediaType": "application/json",
  "protocols": [
    "HTTP"
  ],
  "resources": [
    {
      "relativeUri": "/base",
      "methods": { ... },
      "resources": { ... },
      "relativeUriPathSegments": { ... }
    }
  ]
}

您可能需要也可能不需要调用.replace()它的输出。如果你这样做,使用这个(你使用的是无效的):

.replace(/\n/, os.EOL)
于 2015-08-27T08:12:05.473 回答