node.js学习笔记之HTTP---发送服务器端响应流

时间:2021-11-05 22:01:00
/*使用http.ServerResponse对象的writeHead方法设置响应头信息*/

var http = require('http');
var server = http.createServer(function (req, res) {

if(req.url !== '/favicon.ico'){
res.writeHead(200,{'Content-Type':'text/plain','Access-Control-Allow-Origin':'http://localhost'});
/!*res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});*!/
/!*res.setHeader('Content-Type','text/plain');
res.setHeader('Access-Control-Allow-Origin','http://localhost');*!/
res.write('您好');
}
res.end();
}).listen(3000,'localhost');

html5文件:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>使用ajax获取node.js服务端数据</title>
</head>
<body>
<input type="button" id="butten" value="获取数据" onclick="GetData()" />
<div id="div">

</div>
<script type="text/javascript">
function GetData() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost:3000/", true);
xhr.onreadystatechange = function() {
if(xhr.readyState == 4) {
if(xhr.status == 200) {
document.getElementById("div").innerHTML = xhr.responseText;
}
}
}
xhr.send(null);
}
</script>
</body>

</html>




/*http.ServerResponse对象具有一个headersSent属性,当响应头发出时,该属性值为true,当响应头未发出时,该属性为false*/
var http = require('http');
var server = http.createServer(function (req, res) {
if(req.url !== '/favicon.ico'){
if(res.headersSent)
console.log('响应头已发出');
else
console.log('响应头未发出');
res.writeHead(200,{'Content-type':'text/html'});
if(res.headersSent)
console.log('响应头已发出');
else
console.log('响应头未发出');
res.write('<html><head><meta charset="utf-8"/></head>');
res.write('您好');
}
/!*
*发送响应头的时机:
* 1、在writeHead方法被调用时
* 2、使用setHeader方法时,当write方法被第一次调用时发送响应头
*结果为:
* 响应头未发出
响应头已发出
*!/
res.end();
}).listen(3000,'localhost');
 
/** node.js的http.ServerResponse对象的write方法返回一个布尔类型的返回值,当数据直接发送到操作系统内核缓冲区时返回true*               当数据缓存到内存中时返回false*   可以使用http.ServerResponse对象的setTimeout方法设置相应超时时间*           response.setTimeout(msecs,[callback])*           msecs为一个整数,设置超时时间,单位为毫秒,回调函数没有参数。也可以不写回掉函数,*                           通过监听http.ServerResponse对象的timeout事件并指定事件回掉函数方法完成响应超时所需要的处理* *//*setTimeout方法使用示例*/var http = require('http');var server = http.createServer(function (req, res) {    if(req.url != '/favicon.ico'){        res.setTimeout(1000);        //如果在setTimeout函数中写了回调函数,或者指定了timeout的事件监听函数,        //则相应超时使不会关闭与客户端连接的HTTP客户端socket端口        //所以在本例中客户端仍然会收到‘您好’两字        res.on('timeout',function () {            console.log('响应超时');        });        setTimeout(function () {            res.setHeader('Content-Type','text/html');            res.write('<html><head><meta charset="utf-8"/></head>');            res.write('您好');            res.end();        },2000);    }}).listen(3000);/** 在http.ServerResponse对象的end方法被调用前,如果连接中断,将触发http.ServerResponse对象的close事件,** *//*http.ServerResponse对象的close事件使用示例*/var http = require('http');var server = http.createServer(function (req, res) {    if(req.url != '/favicon.ico'){        setTimeout(function () {            //5秒后向客户端发送 您好            //打开浏览器向服务器发送请求,然后在5秒内关闭页面,服务器就会打印 您好 二字            res.setHeader('Content-Type','text/html');            res.write('<html><head><meta charset="utf-8"/></head>');            res.write('您好');            res.end();        },5000);        res.on('close',function () {            console.log('连接已被中断');        })    }}).listen(3000);