【问题标题】:NodeJs: can't write a fileNodeJs:无法写入文件
【发布时间】:2016-11-26 01:19:33
【问题描述】:

我是 node 新手,为了练习,我想开发一个天气命令行应用程序,但我发现 ajax 请求有问题,我通常使用 jquery 的 $.ajax 但它不起作用,(我'试图要求 jquery )。我已经用另一个模块解决了这个问题。

现在的问题是:当我尝试在 coords.json 上打印 json 信息并接下来使用 read-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"

但如果我在控制台打印它是正常的...

【问题讨论】:

  • 你的代码对coords.json没有任何作用
  • 您遇到了异步问题。您的 fs.readFile() 在您的 writeJson() 函数完成之前执行。
  • 是的,我知道在这段代码中没有出现坐标,test.json 是同一个文件

标签: javascript jquery json ajax node.js


【解决方案1】:

我真的建议您使用 JSON.parse。它将解析您的 json 并将其放入您可以使用的变量中:

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

【讨论】:

    【解决方案2】:

    \ 用于转义引号,以便它们不会结束字符串。它们不应该影响任何东西,实际上是必要的。你试过没有正则表达式吗?如果它实际上删除了 .

    【讨论】:

      猜你喜欢
      • 2018-12-27
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      相关资源
      最近更新 更多