如何在nodejs中设置起始页面

时间:2013-08-07 22:46:15

标签: node.js

我使用没有框架等的节点js而且我有问题,我不明白为我的第一次请求服务器如何设置“启动html页面”。

我试过这样做

var server = new http.Server();
server.listen(1137, '127.0.0.1');

server.on('request', function(req, res) {
    fs.readFile('../public/index.html', function (err, html) {
        if (err) {
            throw err;
        } else {
            res.write(html);
            res.end();
        } 
    });
});

当我向127.0.0.1:1137请求时 - 我在浏览器中获得了html,但是CSS / JS文件的链接不正确以及我如何解决这个问题我不知道:(

我希望在我第一次向我的服务器请求时,在浏览器中获取html页面./public/index.html。

我的服务器位置 项目/服务器/ server.js

我的html页面位置 项目/公共/ index.html中

2 个答案:

答案 0 :(得分:1)

您的页面包含对图片和样式表的引用,您说这些图片和样式表不起作用。

好吧,您正在使用指定HTML页面的内容响应每个HTTP请求。

当浏览器解析HTML时,它会看到图像和样式表链接,并向这些URL发出HTTP请求。但是那些URL不响应图像或样式表。他们用HTML回复。

GET /index.html

产量

<html>
  <head>
    <link rel="stylesheet" href="styles.css">
  </head>

  <body>
    <img src="someimage.png">
  </body>
</html>

然后浏览器请求

GET /styles.css

产量

<html>
...
</html>

然后浏览器请求

GET /someimage.png

产量

<html>
...
</html>

您需要根据请求使响应成为条件。为了防止泄露信息,比如@minitech提到的,你需要注意不要盲目地连接路径。然后你必须担心MIME类型。

你最好使用像express这样的框架。

答案 1 :(得分:0)

您需要返回不同的文件,具体取决于所请求的路径。

'request'处理程序上,您将获得一个ClientRequest对象,该对象具有path属性。使用此信息返回正确的文件(index.html,CSS或JS文件...)。示例请求回调可以是:

function onRequest(req, res) {
  var path = req.path;
  fs.readFile('../public' + path, function(err, contents) {
    if (err) {
      res.writeHead(500);
      res.end(err);
      return;
    }

    res.end(contents);
  });
}

这仍然非常基础,您可能希望使用404结果代码处理不存在的文件,并返回不同文件类型的正确Content-Type标题(text/htmltext/css等等。)

更新:正如minitech建议的那样,应检查../的路径,该路径会上升到文件系统并访问敏感文件。

希望这有帮助。