const fs = require ("fs") работает неправильно на узле js - PullRequest
0 голосов
/ 31 марта 2019

Это мой первый пост здесь, поэтому я прошу прощения, если я сделаю ошибку.

У меня проблема при попытке использовать const fs = require ("fs") в узле js. Код IDE Visual Studio не распознает его как назначенный, и когда я пытаюсь использовать fs.writeFile, я получаю сообщение об ошибке.

Я уже пробовал искать в Интернете, но не могу найти решение. Я новичок в кодировании и был бы признателен за помощь в этом.

const http = require("http");
const fs = require("fs");

const server = http.createServer((req, res) => {
  const url= req.url;

  const method = req.method;
  if (url === "/") {
    res.write("<html>");
    res.write("<head><title>Enter Message</title></head>");
    res.write("<body><form action='/message' method='POST'><input type='text' name='message'><button type='submit'>Enter</button></input></form>");
    res.write("</html>");
    return res.end();
  }
  if (url === "/message" && method === "POST") {
    fs.writeFile("message.txt", "DUMMY");
  }
  res.setHeader("content-type", "text/html");
  res.write("<html>");
  res.write("<head><title>My First Page</title></head>");
  res.write("<body><h1>Hello From My Node Js Server!!!!</h1></body>");
  res.write("<html>");
});

Я ожидал, что фиктивный текст будет записан в файл при запуске программы, но я просто получаю следующую ошибку.

TypeError [ERR_INVALID_CALLBACK]: Callback must be a function
    at maybeCallback (fs.js:128:9)
    at Object.writeFile (fs.js:1158:14)
    at Server.http.createServer (C:\Users\garry\Documents\Eloquent Javascript\Practice\practice.js:15:8)
    at Server.emit (events.js:189:13)
    at parserOnIncoming (_http_server.js:676:12)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:109:17)

Ответы [ 2 ]

0 голосов
/ 31 марта 2019

Подпись метода для writeFile равна, fs.writeFile(file, data[, options], callback) означает, что она ожидает 4 параметра, один необязательный; options и ваш последний параметр должен быть callback function. Подпись для обратного вызова callback(err) означает, что функция обратного вызова, которую вы передаете, должна принять первый параметр для обработки ошибки, если функция writeFile обнаруживает ошибку во время записи. Если ошибки нет, err будет null

Пример использования из документов:

fs.writeFile('message.txt', data, (err) => {
  // check if there is error
  if (err) throw err;
  console.log('The file has been saved!');
});

В вашем вызове у метода отсутствует последний параметр callback function fs.writeFile("message.txt", "DUMMY" // , missing); Вы можете передать свою пользовательскую функцию, например:

function writeSuccess(err) {
  // check if there is error
  if (err) console.error(err);
  else console.log('write success');
}

fs.writeFile("message.txt", "DUMMY", writeSuccess);

Подробнее о callback в целом о MDN

0 голосов
/ 31 марта 2019

Согласно документации Node.js, вы должны предоставить функцию обратного вызова для fs.writeFile.

Ссылка: https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback

...