我一直在寻找解决方案...所以基本上我有2个文件:index.html和hellonode.js。 Index.html有一个带文本的div和一个按钮,当点击时它应该向hellonode.js发出请求。 hellonode.js应该接收请求并向它们发送响应。
hellonode.js:
var http= require('http');
function onRequest(request, response){
console.log("request has been received");
response.writeHead(200, {"Context-Type": "text/plain"});
response.write("<h1>response here!</h1>");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("server is running");
这是我的index.html:
<!DOCTYPE html>
<html>
<head>
<script>
function loadXMLDoc() {
var xmlhttp;
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById('myDiv').innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET", "hellonode.js", true);
xmlhttp.send();
}
</script>
</head>
<body>
<div id="myDiv">
<h2>content</h2>
</div>
<button type="button" onclick="loadXMLDoc()">Your response content should appear here</button>
</body>
</html>
我使用节点js和apache服务器(Apachelounge.com上的二进制版本),并在htdocs文件夹中放入那两个文件,然后启动我的服务器,所以当我从其他计算机访问192.168.0.102时,我得到index.html屏幕。一切都很好,直到这里。当我单击按钮并发送请求时,我收到的响应是hellonode.js的整个javascript代码。为什么会这样?我有一种感觉,我的hellonode.js甚至没有收到我的请求,并且index.html只是阅读hellonode的内容并显示它实际上是向它发送请求。我是这个服务器端的新手。感谢。
答案 0 :(得分:1)
Apache HTTPD是一个HTTP服务器。您编写的JavaScript也是HTTP服务器。
您正在向Apache HTTP发送包含JavaScript程序的文件的请求。
您应该通过Node.js运行JavaScript程序(例如从服务器的命令行),然后使用XMLHttpRequest向http://example.com:8888/
发送请求
注意,您将进入this error,因此您需要修改JavaScript程序以在响应中包含CORS标头。 (或者您可以使用Apache的mod_proxy来向Apache发出请求,然后将其转发到JavaScript服务器)。
答案 1 :(得分:0)
这种情况正在发生,因为您使用GET请求请求文件hellonode.js。
您需要设置和结束您可以发送请求的点。例如。
您需要设置节点服务器而不是apache节点服务器。
答案 2 :(得分:0)
你是对的。通过向hellonode.js发送XHR请求,它只是发送检索文件的请求,然后返回所述文件的所有内容。
看起来你要做的就是运行一个Node服务器。您将需要将服务器配置为能够为Node应用程序提供服务,而不是通过Apache运行它(除非您想要serve a Node app with Apache)。
要在本地执行此操作,您应该运行Pattern pat = Pattern.compile("(?<!\\\\)\"");
System.out.println(pat.matcher("quote \" not escaped").find());
// prints true, the " doesn't follow a \
System.out.println(pat.matcher("quote \\\" escaped").find());
// prints false, the " follows a \
,它将使用Node启动服务器,并且能够像您期望的那样提供资源。
(但是,在这种情况下,向文件发送XHR请求只会返回整个文件而不运行它)
答案 3 :(得分:0)
Nodejs不打算与apache一起运行。 Apache正确显示您的html页面,因为它旨在为PHP脚本提供html页面 - 但不是为了提供节点脚本。因此请求就像纯文本一样返回节点脚本,就像从浏览器中的网页请求.css或.js文件资产一样。
您必须使用node命令设置显式调用它的节点脚本: node hellonode.js
或者在linux中: nodejs hellonode.js
然后,如果您的请求和服务器端脚本已正确编码,则nodejs将实际侦听请求并发送正确的响应。
但是,请记住,使用节点提供服务的页面并不像使用apache那样简单,并且在nodemon或pm2等服务中进行自我教育肯定会让您失望。
答案 4 :(得分:0)
例如,xmlhttp.open("GET", "hellonode.js", true);
可以是xmlhttp.open("GET", "http://www.thomas-bayer.com/sqlrest/", true);
答案 5 :(得分:0)
输入您的终端后:
node hellonode.js
Nodejs服务器正在当前目录上运行,hellonode.js
文件用于在您浏览到localhost:8888
时显示结果,换句话说,您的hellonode.js
文件正在扮演经典php应用程序中的index.php
。
要实现您的目标,您可以使用内置的http模块,或使用Expressjs等框架。