我试图用节点做点什么,基本上我创建了服务器,现在基于我想要获取html页面的url,我在我的项目上创建了一些html页面,我需要返回html页面。
我这样做了
var http = require("http");
var url = require("url");
var fs = require("fs");
var server = http.createServer(function(request,response){
var result = url.parse(request.url,true);
var path = result.pathname;
fs.readFile(path,function(err,data){
if(err){
return console.log("fail");
}
console.log(data);
})
response.writeHead(200,{'Content-Type': 'text/html'});
console.log(path);
response.end();
})
server.listen(3000);
console.log("servidor em execução");
它有点失败,fs.readfile输入错误,我不知道我做错了什么以及如何解决这个问题,你们能给我一点帮助,非常感谢
答案 0 :(得分:0)
您应该尝试使用dirname
if(requestUrl.endsWith('index.html'))
{
data=fs.readFileSync(__dirname + '/../html/index.html', 'utf-8')
| | |
| | v
| v html folder and file
v cd..(move 1 level up)
the directory of current js file(your main js file)
}
使用同步版本以简化当然您使用异步版本,因为它是nodejs友好和性能感知。您不应该将客户端的请求直接放入fs或数据库命令中。
答案 1 :(得分:0)
result.pathname
总是会为您提供没有域名的路径,例如如果请求的网址为“http://localhost:1337/mycustomFolder/myfile.html”,那么pathname
将为您提供'/mycustomFolder/myfile.html',fs.readfile(path...
将始终将此根目录附加到域目录,在我的情况下因为它是C:\因为我通过命令提示符在我的本地运行node.js。所以最后的路径变成了C:\ mycustomFolder \ myfile.html
如果当前目录不是您要查找的目录,则可以使用您想要的任何目录更新此相对路径,并在将其传递给readfile
函数之前创建绝对路径,请参阅下面的示例。你也可以使用.. \任何时间,如果你想指向任何父目录
console.log('Starting server');
var http = require("http");
var url = require("url");
var fs = require("fs");
http.createServer(function (req, res){
var result = url.parse(req.url,true);
var path = result.pathname;
path = 'C:\\Projects' + path;
console.log(path);
fs.readFile(path,function(err,data){
if(err){
return console.log(err);
}
else
console.log(data);
})
res.writeHead(200,{'Content-Type': 'text/html'});
console.log(path);
res.end();
}).listen(1337, '127.0.0.1');
console.log('Server started at port 1337');