0

我使用没有框架等的节点 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。

我的服务器位置 project/server/server.js

我的 html 页面位置 project/public/index.html

4

2 回答 2

2

您的页面包含对图像和样式表的引用,您说它们不起作用。

好吧,您正在使用指定 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 这样的框架。

于 2013-08-07T23:35:13.997 回答
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-Typetext/htmltext/css

更新:正如 minitech 建议的那样,应该检查路径../,这将进入文件系统并访问敏感文件。

希望这可以帮助。

于 2013-08-07T23:00:13.190 回答