这是HTML:
<!DOCTYPE html>
<html>
<head></head>
<body>
<script type="text/javascript" src="jquery-1.12.1.js"></script>
<script type="text/javascript" src="page.js"></script>
</body>
</html>
这里是页面Javascript:
$(document).ready(function() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
console.log(xhr.responseText);
}
};
xhr.open('GET', '');
xhr.send();
});
这里是节点服务器Javascript:
var http = require('http');
http.createServer(function (request, response) {
response.statusCode = 200;
response.setHeader('Content-Type', 'text/plain');
respone.write('Hello, dog');
response.end();
}).listen(80);
console.log('Server is running!!');
当我启动HTML页面并检出控制台时,它已经打印了HTML页面的内容(即以<!DOCTYPE html>
开头)。我试图让它打印出来#34; Hello,dog&#34;来自Node服务器,但似乎服务器的响应在某种程度上得到了胜利,可能是因为浏览器正在通过同一端口有效地监听来自HTML文件的响应。
奇怪的是,如果我将GET请求的url更改为服务器Javascript文件,它实际上将返回该文件的内容。此外,如果我添加一个按钮并通过单击按钮发出AJAX请求(即,该页面已经加载了该页面),HTML文件内容仍会打印到控制台。
我只是在尝试看看这一切是如何运作的。具体来说,我试图让我的页面Javascript与我的节点服务器进行交互,而不使用HTML作为请求和响应的媒介。我还在使用Treehouse AJAX课程,但总的来说,我很难找到有关设置它们进行交流的资源。大多数资源似乎涉及一方或另一方。
答案 0 :(得分:0)
根据上面提供的内容,我只希望在浏览器中导航到localhost:80时看到“Hello Dog”。这就是服务器能够返回的全部内容。如果您希望自己的路由服务于静态索引页面,则必须执行以下操作:
var http = require('http');
var fs = require('fs');
fs.readFile('./index.html', function (err, html) {
if (err) {
throw err;
}
http.createServer(function(request, response) {
response.writeHeader(200, {"Content-Type": "text/html"});
response.write(html);
response.end();
}).listen(80);
});
但是,如上所述,不建议这样做。一般来说,您希望使用某种middleware来帮助管理内容和路由等内容。到目前为止,我认为express是最常见的。这是routing的快速概述,另一个是关于服务static content的概述。有大量的免费资源可以帮助一个人。