Html 返回未定义的

Html 返回未定义的,html,node.js,Html,Node.js,我试图显示一个html页面,创建一个节点http服务器,当我尝试获取它返回的未定义html文件的代码时,这是代码 var http = require('http'); var fileContent = function(path, format) { var fs = require('fs'); fs.readFile(path, format, function(error, contents) { if (error) throw error; return

我试图显示一个html页面,创建一个节点http服务器,当我尝试获取它返回的未定义html文件的代码时,这是代码

var http = require('http');

var fileContent = function(path, format) {
  var fs = require('fs');
  fs.readFile(path, format, function(error, contents) {
    if (error) throw error;
    return contents;
  });
}

var server = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  page = fileContent('./page.html','utf8');
  console.log(page);
  res.end(page);
}).listen(8080);
我打印了错误

[Error: ENOENT: no such file or directory, open './page.html'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: './page.html'
}

两个文件在同一个目录中

首先,
fs.readFile
是异步函数。这意味着不会立即返回答案或阻止线程等待答案。相反,它需要一个回调来让您知道答案何时准备好了

其次,我建议使用
path
module合并(当前模块的目录名)和文件名,以创建绝对文件路径

我将使用不同的方法提供3种解决方案

解决方案1。使用回调方法
var http=require('http');
var fs=需要('fs');
var path=require('path');
var fileContent=函数(路径、格式、cb){
读取文件(路径、格式、函数(错误、内容){
如果(错误)抛出错误;
cb(内容);
});
}
var server=http.createServer(函数(req,res){
res.writeHead(200,{'Content-Type':'text/html'});
fileContent(path.join(uuu dirname,'page.html'),'utf8',函数(page){
控制台日志(第页);
res.end(第页);
});
}).听(8080);
解决方案2。承诺使用
。然后
var http=require('http');
var fs=需要('fs');
var path=require('path');
var fileContent=函数(路径、格式){
返回新承诺(功能(解决、拒绝){
读取文件(路径、格式、函数(错误、内容){
如果(错误)拒绝(错误);
其他决议(内容);
});
});
}
var server=http.createServer(函数(req,res){
res.writeHead(200,{'Content-Type':'text/html'});
fileContent(path.join(uuu dirname,'page.html'),'utf8')
.then(功能)(第页){
控制台日志(第页);
res.end(第页);
});
}).听(8080);
解决方案3。承诺使用异步/等待
var http=require('http');
var fs=需要('fs');
var path=require('path');
var fileContent=函数(路径、格式){
返回新承诺(功能(解决、拒绝){
读取文件(路径、格式、函数(错误、内容){
如果(错误)拒绝(错误);
其他决议(内容);
});
});
}
var server=http.createServer(异步函数(req,res){
res.writeHead(200,{'Content-Type':'text/html'});
var page=await fileContent(path.join(uu dirname,'page.html'),'utf8');
控制台日志(第页);
res.end(第页);
}).听(8080);

尝试使用绝对URL,我不确定
fs
模块是否接受相对路径作为有效参数。您能否显示您的文件夹结构绝对路径也不工作folder>index.js和page.htm尽管我认为没有任何问题,您只需给出相对路径,仅供参考