/*使用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="獲取數據" οnclick="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);