做一個簡單post服務(wù)端和一個客戶端

  1. 服務(wù)端代碼

    // postserver.js
    // 獲取客戶端post來的title、text參數(shù),然后返回給客戶端
    
    var http = require('http');
    var querystring = require('querystring');
    
    var server = http.createServer(function(req, res) {
        var post = '';
    
        req.on('data', function(chunk) {
        post += chunk;
        });
    
        req.on('end', function() {
        post = querystring.parse(post);
    
        res.write(post.title);
        res.write(post.text);
        res.end();
        });
    }).listen(3000);
    

    在控制臺中執(zhí)行node postserver.js,開啟http服務(wù),監(jiān)聽3000端口。

    這是一個沒有使用第三方庫的服務(wù)器,直接由Node.js實現(xiàn)http服務(wù)器并且對客戶端的請求作出反應(yīng),所以從代碼上看會比其它php,jsp等復(fù)雜很多。其實是其它的語言已經(jīng)把這部分功能剝離到了http服務(wù)器上,而Node.js需要自己實現(xiàn)http服務(wù)器,如果采用Express框架,這部分將可以和其它的一樣精簡。

  2. 客戶端代碼

    // httprequest.js
    
    var http = require('http');
    var querystring = require('querystring');
    
    var contents = querystring.stringify({
        title: 'Hello ',
        text: 'Arthur',
    });
    
    var options = {
        host: '127.0.0.1',
        port: '3000',  //非80端口需要指定,如果是80端口則可以省略。
        path: '/',
        headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': contents.length
        }
    };
    
    var req = http.request(options, function(res) {
        res.setEncoding('utf8');
        res.on('data', function(data) {
        console.log('request begin:');
        console.log(data);
        console.log('request end.');
        console.log('--------------------');
        });
    });
    
    req.write(contents);
    req.end();
    

    開一個新的控制臺,執(zhí)行node httprequest.js, 可以得到服務(wù)端返回的結(jié)果:

    $ node postclient.js 
    request begin:
    Hello 
    request end.
    --------------------
    request begin:
    Arthur
    request end.
    --------------------
    

這里我們發(fā)現(xiàn),服務(wù)端每通過res.write()一次,客戶端的http.request中的function(res){...}便會被執(zhí)行一次。值得注意下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容