Неожиданный токен u в JSON в позиции 0 - при разборе строковых данных JSON из файла на веб-сервере

Я записал данные Json в файл, используя JSON.stringify(data), но когда я читаю из файла, используя JSON.parse(data)Я получаю сообщение об ошибке Неожиданный токен в JSON at position 0, Это печатает Undefined когда я печатаю data

function read(req, res) {

    reader.on('data', function (chunk) {
        response += chunk;
    });
    reader.on('end', function () {
        console.log(response);
    })
    reader.on('error', function (err) {
        console.log(err.stack);
    });

}

app.get('/index.html', function (req, res) {
    res.sendFile(__dirname + "/" + "index.html");
})


app.get('/process_get', function (req, res) {
    read(req, res);
    console.log(response);
    res.end(JSON.parse(response)); // Here is the error - reading from file
})

Содержание в файле - outputs.txt

{"first_name":"Kumar","last_name":"Roul"}

Код для маршрутизации из Интернета в файл -

function write(req, res) {
    response = {
        first_name: req.body.first_name,
        last_name: req.body.last_name

    };
    writer.write(JSON.stringify(response));
}
app.post('/process_post', urlencodedParser, function (req, res) {
    write(req, res);
    console.log(response);
    res.end('Successfully written to file');
})

1 ответ

Решение

Вы пытаетесь разобрать файл, прежде чем закончите читать. Поскольку чтение содержимого происходит асинхронно, выполнение продолжается. Это означает response является undefined во время звонка JSON.parse, который требует строку и, следовательно, выдает исключение, так как он не получает его.

Ваш read Функция должна сигнализировать о завершении чтения, либо вызывая обратный вызов (делая подпись read(req, res, callback)) или возвращая обещание. Тогда ваш маршрут должен выполнить любую обработку содержимого файла в обратном вызове или обещании .then(),

Другие вопросы по тегам