Node.js基礎

安裝

在使用Node.js以前,你須要安裝它。 安裝過程很是簡單,若是你使用windows或者OS x,nodejs.org提供了不一樣操做系統下的安裝包,對於Linux來講,你可使用任何的打包工具。打開你的終端,輸入: html

sudo apt-get update
sudo apt-get install node

或者: node

sudo aptitude update
sudo aptitude install node

Node.js位於sid repositories,你能夠添加它們到你的列表裏: mysql

sudo echo deb http://ftp.us.debian.org/debian/ sid main > /etc/apt/sources.list.d/sid.list

注意在舊系統中安裝sid包可能會破壞你的系統。因此小心,安裝完node後請移除/etc/apt/sources.list.d/sid.list sql

安裝新模塊

Node.js擁有一個包管理器,叫作Node Package Manager(NPM)。自動隨node.js安裝,你可使用NPM來安裝模塊。執行以下語句: 數據庫

npm install module_name

無論你使用何種OS,上面語句會安裝指定的模塊名稱 npm

Hello World 應用

很天然,咱們第一個Node.js腳本將打印Hello world到控制檯。以下: json

console.log('Hello World, GBin1!');

咱們保存以上腳本爲hello.js。打開終端/命令行,找到hello.js,執行以下: windows

node hello.js

你應該在控制檯看到'hello world, GBin1!'字樣。 瀏覽器

HTTP Server

下面咱們開發一個更復雜的應用,當讓也不是那麼複雜。請先看看以下代碼http.js: 服務器

// Include http module.
var http = require("http");
 
// Create the server. Function passed as parameter is called on every request made.
// request variable holds all request parameters
// response variable allows you to do anything with response sent to the client.
http.createServer(function (request, response) {
   // Attach listener on end event.
   // This event is called when client sent all data and is waiting for response.
   request.on("end", function () {
      // Write headers to the response.
      // 200 is HTTP status code (this one means success)
      // Second parameter holds header fields in object
      // We are sending plain text, so Content-Type should be text/plain
      response.writeHead(200, {
         'Content-Type': 'text/html'
      });
      // Send data and end response.
      response.end('Welcome to <a href="http://www.gbin1.com">GBin1.com</a>!');
   });
// Listen on the 8080 port.
}).listen(8080);

代碼其實並不複雜,你能夠看到咱們使用response.write()將數據傳遞到客戶端,固然必須在response.end()以前調用。保存代碼,而後在控制檯執行:

node http.js

打開任何瀏覽器,輸入http://localhost:8080,你能夠看到"Welcome to GBin1.com!"出如今頁面上。

處理URL參數

正如前面咱們提到的,咱們須要本身處理Node.js中的任何東西,包括處理參數,其實很是簡單,以下:

// Include http module, 
var http = require("http"), 
// And url module, which is very helpful in parsing request parameters. 
   url = require("url"); 
 
// Create the server. 
http.createServer(function (request, response) { 
   // Attach listener on end event. 
   request.on('end', function () { 
      // Parse the request for arguments and store them in _get variable. 
      // This function parses the url from request and returns object representation. 
      var _get = url.parse(request.url, true).query; 
      // Write headers to the response. 
      response.writeHead(200, { 
         'Content-Type': 'text/plain'
      }); 
      // Send data and end response. 
      response.end('Here is your data: ' + _get['data']); 
   }); 
// Listen on the 8080 port. 
}).listen(8080);

這個代碼使用url模塊的parse()方法,來將請求的URL轉換爲一個對象。返回的對象擁有一個query屬性,能夠用來取得URL參數。保存這段代碼爲get.js而且執行:

node get.js

打開瀏覽器而且輸入地址http://localhost:8080/?data=put_gbstring_here。你將看到效果。

寫入和讀取文件

咱們在node.js中使用fs模塊來管理文件。使用fs.readFile()和fs.writeFile()方法來讀取和寫入文件,請看以下代碼:

// Include http module,
var http = require("http"),
// And mysql module you've just installed.
   fs = require("fs");
 
// Create the http server.
http.createServer(function (request, response) {
   // Attach listener on end event.
   request.on("end", function () {
      // Read the file.
      fs.readFile("test.txt", 'utf-8', function (error, data) {
         // Write headers.
         response.writeHead(200, {
            'Content-Type': 'text/plain'
         });
         // Increment the number obtained from file.
         data = parseInt(data) + 1;
         // Write incremented number to file.
         fs.writeFile('test.txt', data);
         // End response with some nice message.
         response.end('This page was refreshed ' + data + ' times!');
      });
   });
// Listen on the 8080 port.
}).listen(8080);

將以上代碼保存爲file.js,而後建立一個test.txt文件到同一個目錄下。

代碼展現如何使用fs.readFile()和fs.writeFile()。每一次服務器收到一個請求,腳本就會自動添加1,而後寫回文件。fs.readFile()方法接受3個參數:文件名稱,編碼,callback方法。

寫入文件,在這個例子中,很是簡單。咱們不須要等待任何結果,雖然你仍舊處理錯誤。fs.writeFile()方法接受文件名稱和數據做爲參數。同時接受第三個和第四個參數(都是可選的)來指定編碼和callback方法。運行腳本:

node files.js

打 開瀏覽器,輸入http://localhost:8080,刷新頁面幾回。看看結果好像有bug,這裏每次加了2。其實這不是一個錯誤。每一次你請求這 個URL的時候,倆個請求被髮送到服務器。第一個請求是瀏覽器自動請求的 favion.ico。固然第二個請求是咱們腳本對應URL(http://localhost:8080)

爲了解決這個問題,咱們修改代碼以下:

// Include http module,
var http = require("http"),
// And mysql module you've just installed.
   fs = require("fs");
 
// Create the http server.
http.createServer(function (request, response) {
   // Attach listener on end event.
   request.on('end', function () {
      // Check if user requests /
      if (request.url == '/') {
         // Read the file.
         fs.readFile('test.txt', 'utf-8', function (error, data) {
            // Write headers.
            response.writeHead(200, {
               'Content-Type': 'text/plain'
            });
            // Increment the number obtained from file.
            data = parseInt(data) + 1;
            // Write incremented number to file.
            fs.writeFile('test.txt', data);
            // End response with some nice message.
            response.end('This page was refreshed ' + data + ' times!');
         });
      } else {
         // Indicate that requested file was not found.
         response.writeHead(404);
         // And end request without sending any data.
         response.end();
      }
   });
// Listen on the 8080 port.
}).listen(8080);

如今看看,結果是否是正確了。

訪問Mysql數據庫

對 於一個正常的服務器端技術,確定須要有機制來處理數據庫操做。爲了在node.js中使用數據庫,咱們須要安裝類庫,這裏咱們使用node-mysql。 完整的名稱是mysql@2.0.0-alpha2(@後面是版本號)。打開你的控制檯,導航到你保存腳本的目錄,執行以下命令:

npm install mysql@2.0.0-alpha2

這將下載和安裝模塊,同時建立node_module目錄到目前目錄中。下面咱們看看如何使用代碼訪問mysql:

// Include http module, 
var http = require('http'), 
// And mysql module you've just installed. 
   mysql = require("mysql"); 
     
// Create the connection. 
// Data is default to new mysql installation and should be changed according to your configuration. 
var connection = mysql.createConnection({ 
   user: "root", 
   password: "", 
   database: "db_name"
}); 
 
// Create the http server. 
http.createServer(function (request, response) { 
   // Attach listener on end event. 
   request.on('end', function () { 
      // Query the database. 
      connection.query('SELECT * FROM your_table;', function (error, rows, fields) { 
         response.writeHead(200, { 
            'Content-Type': 'x-application/json' 
         }); 
         // Send data as JSON string. 
         // Rows variable holds the result of the query. 
         response.end(JSON.stringify(rows)); 
      }); 
   }); 
// Listen on the 8080 port. 
}).listen(8080);

查 詢數據庫很是簡單,輸入查詢語句和callback方法。在一個實際的應用中,你應該檢查是否有錯誤!(一旦有錯誤,error參數將不會爲 undefined),而且發送響應代碼基於查詢成功或者失敗,注意咱們設定content-type爲x-application/json,這是正確 的JSON MIME類型。rows參數包含了查詢結果,這裏咱們使用JSON,stringify()方法簡單的將rows中的數據轉換爲JSON結構

保存腳本爲mysql.js,執行:

node mysql.js

在瀏覽器中輸入http://localhost:8080,你能夠看到要求你下載JSON格式數據文件。

相關文章
相關標籤/搜索