如何使用fs.readFile读取节点js中的文件.html

时间:2017-11-21 09:25:45

标签: node.js

我使用fs.readFileSync()来读取文件.html并且它正在工作。但是当我使用fs.readFile()时,我遇到了问题。你能帮我解决一下这个问题。感谢

  

使用fs.readFileSync();

var http = require("http");
var fs = require("fs");
http.createServer((req, res) => {
    res.writeHead(200, {
        "Content-type": "text/html"
    });
    var html = fs.readFileSync(__dirname + "/bai55.html", "utf8");
    var user = "Node JS";
    html = html.replace("{ user }", user);
    res.end(html);
}).listen(1337, "127.0.0.1");

enter image description here

  

使用fs.readFile();它无法读取html文件,为什么?

var http = require("http");
var fs = require("fs");
http.createServer((req, res) => {
    res.writeHead(200, {
        "Content-type": "text/html"
    });
    var html = fs.readFile(__dirname + "/bai55.html", "utf8");
    var user = "Node JS";
    html = html.replace("{ user }", user);
    res.end(html);
}).listen(1337, "127.0.0.1");

enter image description here

3 个答案:

答案 0 :(得分:4)

这与nodejs的基本概念有关:异步I / O操作。这意味着当您执行I / O时,程序可以继续执行。一旦文件中的数据准备就绪,它将由回调中的代码处理。换句话说,该函数不返回值,但是它的最后一个操作执行回调传递检索的数据或错误。这是节点中的常见范例,也是处理异步代码的常用方法。 readFile的正确调用将是

fs.readFile(__dirname + "/bai55.html", function (err, html) {
  if (err) throw err;
  var user = "Node JS";
  html = html.replace("{ user }", user);
  res.end(html);
});

答案 1 :(得分:1)

由于readFile使用回调而不立即返回数据。

查看node documentation

fs.readFile('/etc/passwd', (err, data) => {
  if (err) throw err;
  console.log(data);
});

答案 2 :(得分:0)

可以通过杠杆Promise

解决此问题
const fs = require('fs');
const http = require("http");

const fsReadFileHtml = (fileName) => {
    return new Promise((resolve, reject) => {
        fs.readFile(path.join(__dirname, fileName), 'utf8', (error, htmlString) => {
            if (!error && htmlString) {
                resolve(htmlString);
            } else {
                reject(error)
            }
        });
    });
}

http.createServer((req, res) => {
    fsReadFileHtml('bai55.html')
        .then(html => {
            res.writeHead(200, {
                "Content-type": "text/html"
            });
            res.end(html.replace("{ user }", "Node JS"));
        })
        .catch(error => {
            res.setHeader('Content-Type', 'text/plain');
            res.end(`Error ${error}`);
        })
}).listen(1337, "127.0.0.1");