2017-02-09 4 views
-1

Предположим, что у меня есть файл на сервере file1.jsЗапись в существующий файл JS с помощью JavaScript

Теперь мой file1.js содержит код:

var arr = [ {'id':1, 'name':'one'}, 
      {'id':2, 'name':'two'} ]; // array of two objects 

Есть два поля ввода:

ID: <input id> 
Name: <input name> 
<button type="submit" action="xyz"> 

Теперь, нажав кнопку отправки, я хочу открыть file1.js и добавить {'id':<user_entered>, 'name':<user_entered>}, т. Е. Объект в существующий массив.

Это выполнимо? Я не хочу включать здесь базу данных.

arr.push(..) 

является временным решением, то есть если я открыть веб-страницу на другой компьютер или обновить страницу, источник оказываемых здесь не будет содержать массив 3 objects..isn't него ????

+1

вы можете сделать это, но не с js ^^ – user489872

+0

Вы не можете писать в файлах на стороне сервера из javascript. Вместо этого вы можете использовать объект LocalStorage для хранения пользовательских данных в брошюре без истечения срока действия. Это полезно для вас? –

+0

Вы пытаетесь использовать протокол 'file:'? – guest271314

ответ

0

Если вы находитесь в серверной среде, вы можете сначала загрузить файл с помощью fs.readFile, разобрать JSON в обычный массив JS, обработать массив, как вам нужно (например, добавить дополнительный объект), а затем записать сериализованный JSON возвращается к тому же пути.

Это будет выглядеть примерно так:

fs.readFile(path.join(__dirname, 'myFile.json'), 'utf-8', (err, data) => { 
     if (err) { 
     console.log('Error reading file'); 
     } 
     const myArray = JSON.parse(data); 
     myArray.push({ new: 'object' }); 
     fs.writeFile(path.join(__dirname, 'myFile.json'), JSON.stringify(myArray), e => { 
     if (e) { 
      console.log('Error writing file'); 
     } 
     console.log('Success'); 
     }); 
    }); 

Если вы строите только в Интернете, однако, это звучит как работа для LocalStorage. Она будет работать очень сходно:

const savedArray = localStorage.getItem('my_saved_array'); 
const myArray = savedArray ? JSON.parse(savedArray) : {}; 
myArray.push({ new: 'object' }); 
localStorage.setItem('my_saved_array', JSON.stringify(myArray)); 

Это возможно JSON.parse бросить и ошибок, так что вы можете обернуть это в примерки уловом. Это также затрагивает проблему открытия страницы на другой вкладке, поскольку localStorage сохраняется для каждого сайта в том же браузере. Однако если вы открыли сайт в хроме, а затем в сафари, localStorage не будет синхронизироваться.

Надеюсь, это поможет.

+0

Первое решение кажется близким, но насколько я понимаю: вы загружаете файл JSON file-> add и затем возвращаете его обратно. Если мое понимание правильное, возможно, вы не поняли вопрос. Существует массив в файле .js (обычный файл js, который имеет некоторые методы, переменные и массив из двух объектов, и в этот массив мне нужно добавить объект) –

+0

Можете ли вы переместить массив в свой собственный файл и то требуется ли это из основного сценария? Это будет очень сложная задача, чтобы надежно вставить текст в исходный файл. – mparis

+0

Я искал способ избежать DB, серверных скриптовых языков, но я не вижу в этом решения. Спасибо :) –

Смежные вопросы