node.js學習筆記之HTTP---發送服務器端響應流

/*使用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);



發佈了181 篇原創文章 · 獲贊 36 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章