基于网址提供HTML页面

时间:2016-11-30 22:52:16

标签: javascript node.js

我试图用节点做点什么,基本上我创建了服务器,现在基于我想要获取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输入错误,我不知道我做错了什么以及如何解决这个问题,你们能给我一点帮助,非常感谢

2 个答案:

答案 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');