2016-05-19 10 views
-1

Я хочу создать файл конфигурации перед конкретными действиями. Таким образом, это означает, что я создал файл конфигурации в моей папке, сначала не содержащий ничего.Почему не удается перезаписать файл (fs node.js)?

Затем я запускаю следующий код:

db.getData(function(err,data) { //it's an dynamodb don't know if this matter 
    var entry = { 
     dataItems: data.Items[0].items, 
     timestamp: data.LastEvaluatedKey.timestamp.N 
    }; 

    try { 
     fs.writeFile("./config", JSON.stringify(entry), function (err) { 
      if(err) { 
       throw new Error(err); 
      } 
      callback(); //want to know when file is filled with data 
     }); 

    } catch (err) { 
     throw err; 
    } 
}); 

Файл имеет содержание в настоящее время. Но я не хочу очищать файл каждый раз до того, как эта функция будет выполнена, она должна быть перезаписана. Если я запускаю этот код еще раз я получаю сообщение об ошибке:

function (exports, require, module, __filename, __dirname) { {"data":{"S":"[{\ 
                     ^^^^^^ 
SyntaxError: Unexpected token : 

Таким образом, объект ответа от моего дб Wich код написал в файле раньше. Я очистился, чтобы проверить файл, если это проблема из-за попытки перезаписать и запустить код снова, и все было хорошо.

Я делал исследования, что может быть моей проблемой, но единственное, что я нашел, это сообщения от людей, пытающихся избежать перезаписывания их файлов, поэтому, я думаю, я ошибаюсь, написав этот файл, потому что перезапись кажется стандартной, а не специальная задача. И this сайт показывает, как использовать fs.writeFile, и я не вижу разницы в моих:

+0

Вы вызываете обратный вызов, прежде чем писать файл. И 'data.toString()' явно ** не **, что вы хотите (может быть, 'JSON.stringify (data)'). –

+0

Я удалил часть с fs.read, потому что это не важно, какой контент был у файла. Поэтому я редактировал мой код, но toString просто пыталась проверить, не изменит ли это что-либо. – nova

+0

Вы все еще вызываете обратный вызов перед тем, как записать файл. –

ответ

1

Я издевался над функцией db.getData, чтобы возвращать достоверные данные и работает.

var fs = require('fs'); 

var db = { 
    getData: function(callback) { 
    var data = {"Items": [{"items": "entry"}], "LastEvaluatedKey": {"timestamp": {"N": 12323234}}}; 
    callback(null, data); 
    } 
} 

var callback =() => console.log("It worked"); 

db.getData(function(err,data) { //it's an dynamodb don't know if this matter 
    var entry = { 
     dataItems: data.Items[0].items, 
     timestamp: data.LastEvaluatedKey.timestamp.N 
    }; 

    try { 
     fs.writeFile("./config", JSON.stringify(entry), function (err) { 
      if(err) { 
       throw new Error(err); 
      } 
      callback(); //want to know when file is filled with data 
     }); 

    } catch (err) { 
     throw err; 
    } 
}); 

Похоже, что ваши данные не могут быть сериализованы правильно? Это также объясняет, что интерпретатор жалуется на Unexpected token :