Html 返回未定义的
我试图显示一个html页面,创建一个节点http服务器,当我尝试获取它返回的未定义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
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尽管我认为没有任何问题,您只需给出相对路径,仅供参考