2016-11-26 41 views
0

我是新的节点,实践中我认为开发一个天气命令行应用程序,但我发现了一个问题与ajax请求,我通常使用jQuery的$ .ajax但它不起作用,(我试图要求jQuery)。我已经用另一个模块解决了这个问题。NodeJs:不能写一个文件

现在的问题是:当我尝试打印在coords.json JSON信息和接下来读JSON模块读取它也有一些“\” &“\ n”无处不在的字符串,我试图用正则表达式替换它和fs模块,但它不重写该文件...为什么?

这里全码:

// index.js 
// modules 
const program = require('commander'); 
const clear = require('clear'); 
const chalk = require('chalk'); 
const request = require('ajax-request'); 
const fs = require('fs'); 

const json = require('read-data').json; 
const writeJson = require('write-json'); 

// Forecast.io Key 
const key = "*************"; 
const freegeoip = "http://freegeoip.net/json/"; 

let latitude = 0, 
    longitude = 0 ; 

// forecast.io api url 
const url = `https://api.darksky.net/forecast/${key}/${latitude},${longitude}`; 

// initialize myData with the freegeoip datas 
let myData = request({ 
    url: 'http://freegeoip.net/json/', 
    method: 'GET', 
    data: { 
    format: 'json' 
    }, 
}, function(err, res, body) { 
    writeJson('test.json', body, function(err) { 
    if (err) console.log(err); 
    }); 
}); 

fs.readFile('test.json', 'utf8', function (err,data) { 
    let result = data.replace(/[\\~#%&*<>?|\-]/g, ''); 
    fs.writeFile('test.json', result, 'utf8', function (err) { 
     if (err) return console.log(err); 
     // if i do this is normal json 
     // console.log(result) 
    }); 

}); 

,并在文件中的输出是:

// coords.json 

"{\"ip\":\"**.**.**.**\",\"country_code\":\"IT\",\"country_name\":\"Italy\",\"region_code\":\"62\",\"region_name\":\"Latium\",\"city\":\"Rome\",\"zip_code\":\"00119\",\"time_zone\":\"Europe/Rome\",\"latitude\":**.*,\"longitude\":**.**\"metro_code\":0}\n" 

,但如果我在控制台打印出来这是正常的...

+1

您的代码做什么用'coords.json' –

+0

您有一个异步的问题。你的'fs.readFile()'在writeJson()函数完成之前执行。 – jfriend00

+0

是的,我知道在这个代码中coords不会出现,test.json是同一个文件 – rawnly

回答

2

我真的建议你使用JSON.parse。它会分析你的JSON,并把它变成一个变量,你可以使用:

fs.readFile('test.json', 'utf8', function (err,data) { 
    data = JSON.parse(data); // Yay you can use anything from the JSON 
} 
0

的\是有逃避报价,以便他们不会结束字符串。他们不应该影响任何事情,而且实际上是必要的。你没有尝试过正则表达式吗?如果它真的消除了这种情况,那可能会破坏事情。