我一直通过反复试验的方式自学 Node.js。我使用 Node.js HTTP 类构建了一个简单的服务器。我发现我可以异步读取文件并使用异步服务提供数据fs.readFile(..., cbk)
回调方法。目前我不明白的是如何响应请求所需的所有其他资源。
// "./index.js"
var http = require('http');
var fs = require('fs');
http.createServer(function (req, res){
fs.readFile('index.html', function(err, data){
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
res.end();
});
}).listen(8080);
为了保持单一焦点,我将只使用Style-sheets
举个例子。下面是一个超级常见的链接标签,它演示了我通常如何告诉服务器页面需要特定的 CSS 文件。它在前端方面工作得很好。但是,如何处理来自服务器端(或后端)链接标记的请求?
<link rel="stylesheet" type="text/css" href="/foo/bar/raboof.css">
您的 Node.js 服务器未编程为在浏览器请求时发送任何样式表。
像您创建的那样,nodejs 服务器默认不提供任何文件。它只提供您编程提供的文件。所以,你的nodejs服务器被编程为做一件事并且只做一件事,那就是交付index.html
无论从它请求什么 URL。
那么,会发生以下情况:
- 用户输入您网站的一些 URL
- 浏览器向您的服务器发送对该页面的请求
- 您的网络服务器提供
index.html
- 浏览器解析
index.html
并找到样式表链接
- 浏览器向您的服务器发送样式表链接请求
- 你的服务器发送它
index.html
- 浏览器意识到“这不是样式表”,并且您没有得到任何样式
因此,为了让您的 HTML 服务器正常工作,您必须添加代码来查看请求的 URL,如果它是样式表 URL,则需要发送该样式表的正确文件,而不仅仅是盲目发送index.html
不管有什么要求。
没有人说你需要使用 Express 库来实现此目的,但这就是它的作用。它使得配置发出不同类型的请求时发送的内容变得非常容易。而且,对于 CSS 文件等静态资源的请求,甚至可以将其配置为自动直接从文件系统发送它们。
如果您不想为此使用 Express,则不必这样做,但是您必须编写自己的代码,以便在请求不同的 URL 时提供正确的数据。
如果您想为此编写自己的代码,则必须创建某种if/else
or switch
语句或表查找req.url
然后发送与请求的 URL 匹配的适当内容。然后,当浏览器请求您的样式表时,您实际上可以向其发送适当的样式表,而不是index.html
。对于 JavaScript 文件、图像、页面图标、ajax 请求或页面引用的服务器上的任何资源也是如此。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)