[NodeJS]Node開發Web程式入門

來源:互聯網
上載者:User

標籤:delete   好的   ade   實現   http服務   程式   cti   擷取   function   

Node內建了http模組提供HTTP伺服器和用戶端介面

var http = require("http");

建立HTTP伺服器只需要簡單的調用http.createServer()函數,參數是回呼函數,接收兩個參數: request,  response對象。

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

在觸發回呼函數之前Node就已經對HTTP要求標頭進行瞭解析,但是並沒有對請求體進行解析。另外需要有開發人員自行調用response.end()方法來結束響應。

HTTP伺服器需要綁定一個連接埠號碼,用來監聽接入的請求。使用http.server類的listen方法

一個最簡單的HTTP伺服器代碼:

var http = require("http");var server = http.createServer(function(req, res){    res.write("hello world");    res.end();}server.listen(8080);

接下來讓我們看看如何擷取要求標頭資訊和如何設定回應標頭資訊

1. 擷取要求標頭資訊

req.headers

req.rawHeaders

通過這兩個屬性擷取要求標頭資訊。這兩者的區別在於,headers擷取的是索引值對格式的對象,並且重複要求標頭資訊會被捨棄。而rawHeaders擷取的是列表,奇數為要求標頭名稱,偶數為要求標頭資訊,同時重複的要求標頭資訊也會放在列表中。 

2. 設定回應標頭資訊

response對象提供了setHeader(field, value),  getHeader(field, value),  removeHeader(field) 方法

設定回應標頭一定要在發送訊息體之前,常用的回應標頭包括

Content-Type: "text/plain", "text/html"

Content-Length 設定響應訊息體的位元組長度  可以使用Buffer.byteLength方法擷取字串資料的實際位元組長度

3. 設定響應狀態代碼

response.statusCode

NodeJS中的http模組提供了http.STATUS_CODES屬性用來描述標準HTTP協議規定的狀態代碼及標題文字說明

設定response.statusCode = 302 表示 重新導向

構建RESTful WEB服務

建立標準的REST伺服器需要實現四個HTTP操作: POST  GET  DELETE  PUT 分別對應人們常說的CURD操作

另外人們也常用curl命令列方式來進行web操作

當有請求發送資料時,HTTP解析器會將資料做成data事件的形式,將解析好的資料放入chunk中。也就是監聽request請求的data事件和end事件

var http = require("http");var server = http.createServer(function(req, res){    req.setEncoding("utf-8");    req.on("data", function(chunk){        console.log("parsed", chunk);    });    req.on("end", function(){        console.log("done parsing");        res.end();    });});

使用req.method屬性來判斷請求方式

解析URL路徑資訊還需要用到核心模組url

通過理解req.method,url,和request請求對象的資料解析原理對於以後使用封裝好的進階架構是有好處的。

比如在Express中,就提供了.all() .get() .post() .put() .delete()等方法 

構建靜態檔案伺服器

Stream.pipe()方法可以理解為將源頭的資料(ReadableStream)通過管道pipe流動到目的地(WritableStream)

所有ReadableStream都能接入到任何的WriteableStream中,比如request就是一個ReadableStream, response就是一個WritableStream

var http = require("http");var parse = require("url").parse;var join = require("path").join;var fs = require("fs");var root = __dirname;var server = http.createServer(function(req, res){    var pathname = parse(req.url).pathname;    var path = join(root, pathname);    fs.stat(path, function(err, stat){        if(err){            if(err.code === "ENOENT"){                res.statusCode = 404;                res.end("Not Found");            }else{                res.statusCode = 500;                res.end("Internal Server Error");            }        }else{            //沒有錯誤,準備讀取檔案內容並返回            res.setHeader("Content-Length", stat.size);            var stream = fs.createReadStream(path);            stream.pipe(res);            stream.on("error", function(err){                res.statusCode = 500;                res.end("Internal Server Error");            });        }    });});server.listen(8080);

 

[NodeJS]Node開發Web程式入門

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.