如何使用 vanilla JavaScript 将读取的文本文件内容发送给 Node.js 中的客户端?

How to send read txtFile content to client in Node.js with vanilla JavaScript?

我正在尝试从我的 server.js 文件中获取 txt 文件中的一些数据,但我不确定如何获取该数据。

server.js:

const server = http.createServer((req, res) => {
    const { method, url } = req;
    res.status = 200;
    res.setHeader("Content-type", "text/json");
    res.setHeader("Access-Control-Allow-Origin", "*");
    res.setHeader("Access-Control-Allow-Methods", "*");
    res.setHeader("Access-Control-Allow-Headers", "*");

    if (url === "/view-stuff" && method === "GET") {
        console.log("RECIEVED GET REQ");
        let stuffReturned= fs.readFile("string.txt", (err, data) => {
            if (err) {
                throw err;
            } else {
                return data;
            }
        });
        res.writeHead(200, { "Content-Type": "text/plain" });
        res.write(stuffReturned);
    }     
res.end();
});

client.js:

function getStuffToview(){
    const request = new XMLHttpRequest();
    request.open("GET", "//localhost:1000//view-stuff", true);
    request.addEventListener("load", function () {
        try {
            console.log(this.responseText);
        } catch (e) {
            console.log(request.status);
        }
    });
    request.send();
});
}

我知道它在某种程度上起作用了,因为我的控制台正在记录“RECEIVED GET REQ”。但是,在记录之后我收到此错误:

TypeError [ERR_INVALID_ARG_TYPE]: The "chunk" argument must be of type string or an instance of Buffer or Uint8Array. Received undefined.

我试过 res.send(stuffReturned),但它只是说“res.send(stuffReturned)”不是函数。

fs.readFile()是一个读取文件内容的异步函数。它没有 return 任何东西。

fs.readFileSync()是同步读函数。它 return 是正在读取的文件的内容。

两者之间的区别在于,fs.readFileSync 会阻止其他操作,直到读取完成并 returned 内容,而 fs.readFile 异步执行此操作,允许其他操作在分块读取文件时完成。

Node.JS 还包括 Promise 版本的文件系统方法,例如 filehandle.readFile()。您可以像这样使用它们:

const fs = require("fs/promises");

(async () => {
  const stuffReturned = await fs.readFile("string.txt");
  console.log(stuffReturned); // the contents of the file
});