Как исправить эту ошибку TypeError [ERR_INVALID_CALLBACK]: обратный вызов должен быть функцией

Я новичок в nodejs. Когда я набираю следующее, ошибка кода возникает следующим образом:

TypeError [ERR_INVALID_CALLBACK]: Callback must be a function

var fs = require('fs');
fs.readFile('readMe.txt', 'utf8', function (err, data) {
  fs.writeFile('writeMe.txt', data);
});
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
49
0
83 579
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

fs.writeFile(...) требует третьего (или четвертого) параметра, который является функцией обратного вызова, которая будет вызываться после завершения операции. Вы должны либо предоставить функцию обратного вызова, либо использовать fs.writeFileSync(...)

См. узел fs docs для получения дополнительной информации.

Ответ принят как подходящий

Fs.writeFile () согласно документации здесь принимает ( file, data [, options] и callback), поэтому ваш код будет таким:

 var fs = require('fs');
 fs.readFile('readMe.txt', 'utf8', function (err, data) {
  fs.writeFile('writeMe.txt', data, function(err, result) {
     if (err) console.info('error', err);
   });
 });

Идеально! Но почему мы снова определяем функцию для writeFile в качестве третьего параметра, когда у нас есть параметр data из readFile, который содержит данные? Почему мы не можем повторно использовать одни и те же данные?

Arjun Kalidas 06.02.2019 02:30

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

Kumar Ajay A.K 09.05.2020 05:54

Эта ошибка ударила меня по лицу, когда я делал следующее;

var hello = myfunction( callme() );

скорее, чем

var hello = myfunction( callme );

Начиная с узла 10, обязательно передать обратный вызов на fs.writefile().

Node.js задокументировал цель изменения: https://github.com/nodejs/node/blob/master/doc/api/deprecations.md#dep0013-fs-asynchronous-function-without-callback

Вы можете добавить пустой обратный вызов, например fs.writeFile('writeMe.txt', data, () => {})

вы также используете это

var file2 =  fs.readFileSync("./Public/n2.jpeg")

При использовании await нет необходимости использовать readFileSync, потому что, как следует из названия, readFileSync - это синхронный.

Jia Jian Goi 16.06.2020 07:24

await и readFileSync полностью избыточны, поскольку readFileSync уже является функцией синхронизации

Javier del Saz 02.07.2020 10:47
var fs = require('fs');

fs.readFile('readme.txt', 'utf8', function(err, data) {
    fs.writeFile('writemeee.txt', data, function(err, result) {

        if (err) console.info('error', err);

    });
});

Хотя этот код может решить проблему OP, лучше всего включить объяснение того, как ваш код решает проблему OP. Таким образом, будущие посетители могут извлечь уроки из вашего сообщения и применить его к своему собственному коду. SO - это не сервис кодирования, а ресурс знаний. Кроме того, больше шансов получить качественные и полные ответы. Эти функции, наряду с требованием, чтобы все сообщения были автономными, являются одними из сильных сторон SO как платформы, которые отличает ее от форумов. Вы можете редактировать, чтобы добавить дополнительную информацию и / или дополнить свои пояснения исходной документацией.

ysf 07.06.2020 00:01

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