1. 程式人生 > >Node學習——開篇

Node學習——開篇

高性能 listen 路徑 url 運行環境 running fun 服務器端 org

前言:自從下決心轉學前端以來,我的專業課java基本荒廢了,所以對於後臺開發的邏輯也已基本忘幹凈了。但是作為一名準前端程序猿,我認為還是有必要了解後端開發的,雖不必深入學習,但是能夠了解項目從前端到後端的整個流程,實現簡單的業務邏輯(增刪改查)應該對我們大有裨益。NodeJS應該說是前端開發人員涉及後端開發的最佳選擇,因為使用的是前端很熟悉的Javascript語言。

一、什麽是Node.js

Node.js是一個基於V8引擎的服務器端Javascript運行環境。Javascript(簡稱JS,下同)從此有了開發後段應用程序的能力。

因為使用的是JS語言,所以一發布以來就受到了廣大前端開發人員的喜愛。很多前端開發人員開始涉足後端開發,使用Node.js重構前端工具。

Node.js通過非阻塞I/O流、事件驅動機制展現了它超強的高並發能力。此外,Node使用的是高性能的V8引擎,提供了很多不同用途的API,采用全新的編譯技術,實現了一個高性能的服務器。

二、Node.js環境安裝

Node.js的環境安裝十分簡單,去官網 http://nodejs.org/en/ 下載穩定版本安裝包,點擊下一步下一步安裝即可。

完成以後可以打開CMD輸入node -v查看是否安裝成功:

C:\Users\dawei>node -v
v6.11.1

出現node的版本號則表示安裝成功。

現在我們就開始學習Nodejs。Node.js中,將很多功能劃分為一個個module(模塊)。Node.js中的很多功能都是通過模塊來實現的。

三、http模塊

HTTP模塊用於創建服務器,接收和響應客戶端的請求。

//1、引入http模塊
var http = require(‘http‘);

//創建服務器
var server = http.createServer(function (req , res) {
    //發送HTTP頭部
    //HTTP狀態碼:200:OK
    //設置HTTP頭部,狀態碼是200,文件類型是html,字符集是utf-8
    res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
    
    //發送相應數據
    res.write("Hello Node.js");
    
    //結束處理程序,返回數據
    res.end();
});

server.listen(8080);      //監聽端口

//在終端打印如下信息,提示服務器已啟動
console.log("Server running at http://127.0.0.1:8080/");  

這樣我們就完整的創建了一個web服務器,可以在瀏覽器通過http://127.0.0.1:8080訪問該服務器。

回調函數中的req對象包含了客戶端請求的信息,可以使用req.url屬性拿到用戶請求的URL地址,在後期我們就是要通過不同的URL來設計不同的路由。那麽識別這個URL,就用到了URL模塊。

四、URL模塊

URL模塊提供了幾個方法用於操作url。

  • url.parse(req.url):解析url,將url地址轉為url對象
  • url.format():將url對象轉為url字符串,是parse方法的逆向操作
  • url.resolve(from,to) :添加或者替換路由

1、url.parse()

假設在上面的代碼段中引入了url模塊

url.parse(req.url)

那麽將會打印如下內容
{
  protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: null,
  query: null,
  pathname: ‘/‘,
  path: ‘/‘,
  href: ‘/‘ }
  

由於我們只是訪問了根路徑,所以內容基本為空,很多情況下我們需要訪問詳細的頁面並且傳遞參數
http://127.0.0.1:8080/login.html?uaername=dawei&pass=123

{
  protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: ‘?uaername=dawei&pass=123‘,
  query: ‘username=dawei&pass=123‘,
  pathname: ‘/login.html‘,
  path: ‘/login.html?uaername=dawei&pass=123‘,
  href: ‘/login.html?uaername=dawei&pass=123‘ }

可以看到,這個對象的query屬性保存了我們的參數,也叫做查詢字符串。pathname屬性中保存了我們的訪問路徑。這兩個屬性很常用。

我們往往需要獲取參數信息,在服務器端做進一步處理。在JS中我們可以使用字符串截取來獲取參數,不過再這裏我們可以直接給parse方法傳遞一個參數true來將查詢字符串轉為對象格式,從而很方便的獲取。

url.parse(req.url,true)

{
  protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: ‘?username=dawei&pass=123‘,
  query: { username: ‘dawei‘, pass: ‘123‘ },
  pathname: ‘/login.html‘,
  path: ‘/login.html?username=dawei&pass=123‘,
  href: ‘/login.html?username=dawei&pass=123‘ }

這樣我們就可以很方便的獲取參數的值。

2、url.resolve()

a、增加路由

var a = url.resolve(‘http://example.com/‘, ‘/one‘);
console.log(a);     //  http://example.com/one

b、替換路由

var b = url.resolve(‘http://example.com/one‘, ‘/two‘);
console.log(b);        //   http://example.com/two

Node學習——開篇