2015-08-27 51 views
3

我想寫一個字符串在文件中的node.js寫一個文件保存選項卡和EOL

我有一些錯構瘤的文件,我能夠加入他們的內容。如果我打印變量控制檯,我看到它以及解析,但只要我保存在一個文件中,該文件只包含一個單行:

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

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) 
+0

謝謝。有用。 – Biribu

相關問題