Size: a a a

Node.js — русскоговорящее сообщество

2020 April 26

AS

Artem Soroka in Node.js — русскоговорящее сообщество
Saken Zhalgas
Добрый день! Не могу найти решение ошибке SyntaxError: Unexpected end of JSON input. Код:     save(){
       const p = path.join(path.dirname(process.mainModule.filename) , 'data' , 'product.json')
       fs.readFile(p, (err, dataContent) => {
           let products= []
           if (!err){
               products = JSON.parse(dataContent)
           }
           products.push(this)
           fs.writeFile(p, JSON.stringify(products), (err) => {
               console.log(err)
           })
       })
   }
убедитесь, что dataContent это вообще json
источник

SZ

Saken Zhalgas in Node.js — русскоговорящее сообщество
Artem Soroka
убедитесь, что dataContent это вообще json
ну эта строка то и должна приводить к json path.join(path.dirname(process.mainModule.filename) , 'data' , 'product.json')
источник

ДБ

Дмитрий Беляев... in Node.js — русскоговорящее сообщество
Алексей Клименко
> в связи с выходом 14 ноды

Это та, что только компиляцией исходников ставится?..
источник

SZ

Saken Zhalgas in Node.js — русскоговорящее сообщество
Я проверил с помощью F12, оказалось что json даже не приходит. Хотя path я вроде ввел правильно const p = path.join(path.dirname(process.mainModule.filename) , 'data' , 'product.json')
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Saken Zhalgas
Я проверил с помощью F12, оказалось что json даже не приходит. Хотя path я вроде ввел правильно const p = path.join(path.dirname(process.mainModule.filename) , 'data' , 'product.json')
Ну логируйте все переменные, которые вас подводят, и по факту смотрите.
источник

ЮС

Юрий Семёнов... in Node.js — русскоговорящее сообщество
слушайте, а зачем вам вообще этот readFile нужен? можно ж просто require('./data/product.json') затащить
источник

SZ

Saken Zhalgas in Node.js — русскоговорящее сообщество
Юрий Семёнов
слушайте, а зачем вам вообще этот readFile нужен? можно ж просто require('./data/product.json') затащить
Боже, спасибо. Я использовал ваше решение но просто убрав path и поставил переменную с импортом к json.
источник

ЮС

Юрий Семёнов... in Node.js — русскоговорящее сообщество
к тому же products.push(this) это ж не будет работать, вообще непонятно что тут делается, в массив доьавляется какой-то внешний контекст
источник

SZ

Saken Zhalgas in Node.js — русскоговорящее сообщество
Ну я по туториалу пишу, там все работало. Вот я начал смотреть и пробовоть
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Юрий Семёнов
слушайте, а зачем вам вообще этот readFile нужен? можно ж просто require('./data/product.json') затащить
А он же синхронно зачитает и заблочит исполнение? (Я просто не знаю).
источник

ЮС

Юрий Семёнов... in Node.js — русскоговорящее сообщество
ну так оберните в промис и будет вам асинхронно
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Юрий Семёнов
ну так оберните в промис и будет вам асинхронно
require ?
источник

ЮС

Юрий Семёнов... in Node.js — русскоговорящее сообщество
ну
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Он же сам по себе синхронный, нет?

От того что я оберну его во что-то – event-loop всё равно застрянет, просто не «сейчас», а как дойдёт туда.
источник

ЮС

Юрий Семёнов... in Node.js — русскоговорящее сообщество
сорян, всё верно
источник

ЮС

Юрий Семёнов... in Node.js — русскоговорящее сообщество
но вообще тут есть нюанс, если файл json слишком большой, то его лучше вообще через read stream вычитать (ну и собсно куда-то в другое место положить), а если файл мизерный, то зачем переживать по поводу асинхронности?
источник

ЮС

Юрий Семёнов... in Node.js — русскоговорящее сообщество
в npm достаточно модулей для чтения потока json
источник

SZ

Saken Zhalgas in Node.js — русскоговорящее сообщество
Алексей Клименко
А он же синхронно зачитает и заблочит исполнение? (Я просто не знаю).
readFile ассинхронный, readFileSync синхронный
источник

AB

Andrey Bogachenko in Node.js — русскоговорящее сообщество
всем привет) вопрос такой:
есть картинки, которые с помощью крон таски подгружаются раз в день. если этих картинок больше 10, последняя удаляется. все это яя храню в массиве. но если нода упадет, массив станет пустым, какие выходы из ситуации без использования базы? после каждой подгрузки, я пробегаюсь по массиву и меняю там одно свойство
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Saken Zhalgas
readFile ассинхронный, readFileSync синхронный
Это понятно, но его ж на require предложили заменить.
источник