2016-11-26 7 views
0

Ich bin neu in Node, für die Praxis dachte ich, um eine Wetter Kommandozeilenanwendung zu entwickeln, aber ich fand ein Problem mit AJAX-Anfrage, ich verwende normalerweise $ .AJAX von JQuery aber es funktioniert nicht (ich habe versucht, jquery zu verlangen). Ich habe dieses Problem mit einem anderen Modul gelöst.NodeJs: kann keine Datei schreiben

Nun das Problem ist: wenn ich json Informationen über die coords.json und nächstes lesen Sie es mit schreib json Modul gibt es einige „\“ & „\ n“ überall in der Zeichenfolge versuchen zu drucken, Ich habe versucht, es mit Regex und FS Modul zu ersetzen, aber es nicht die Datei neu schreiben ... warum?

Hier wird der vollständige Code:

// 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) 
    }); 

}); 

und die Ausgabe in der Datei ist:

// 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" 

, aber wenn ich es in der Konsole gedruckt, es ist normal ...

+1

Ihr Code tut nichts mit 'coords.json' –

+0

Sie haben eine Asynchron-Ausgabe. Ihre 'fs.readFile()' wird ausgeführt, bevor Ihre 'writeJson()' Funktion beendet ist. – jfriend00

+0

Ja, ich weiß in diesem Code Coords nicht angezeigt, test.json ist die gleiche Datei – rawnly

Antwort

2

Ich empfehle wirklich, dass Sie JSON.parse verwenden. Es wird Ihr json analysieren und sie in eine Variable setzen Sie verwenden können:

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

Die \ sind Dort um den Anführungszeichen zu entkommen, damit sie die Zeichenkette nicht beenden. Sie sollten nichts beeinflussen und sind tatsächlich notwendig. Hast du es ohne die Regex versucht? Das könnte Dinge kaputt machen, wenn es das tatsächlich beseitigt.

Verwandte Themen