我使用没有框架等的节点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中
答案 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/html
,text/css
等等。)
更新:正如minitech建议的那样,应检查../
的路径,该路径会上升到文件系统并访问敏感文件。
希望这有帮助。