node.js使用

  • Node.js 是單進程單線程應用程序,可是經過事件和回調支持併發,因此性能很是高。
    Node.js 的每個 API 都是異步的,並做爲一個獨立線程運行,使用異步函數調用,並處理併發。
    Node.js 基本上全部的事件機制都是用設計模式中觀察者模式實現。
    Node.js 單線程相似進入一個while(true)的事件循環,直到沒有事件觀察者退出,每一個異步事件都生成一個事件觀察者,若是有事件發生就調用該回調函數.
  • 安裝node.js,http://www.runoob.com/nodejs/nodejs-install-setup.html
  • 安裝成功後,helloworld
var http = require('http');

http.createServer(function (request, response) {

    // 發送 HTTP 頭部 
    // HTTP 狀態值: 200 : OK
    // 內容類型: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain'});

    // 發送響應數據 "Hello World"
    response.end('Hello World\n');
}).listen(8888);

// 終端打印以下信息
console.log('Server running at http://127.0.0.1:8888/');

cmd中輸入如下命令:html

node server.js
Server running at http://127.0.0.1:8888/

接下來,打開瀏覽器訪問 http://127.0.0.1:8888/ ,你會看到一個寫着 "Hello World"的網頁。node

  • 安裝npm,高版本的nodejs自帶npm,能夠安裝淘寶鏡像
  • Node.js 回調函數,非租塞 讀取文件示例:
var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});

console.log("程序執行結束!");
  • Node.js 事件驅動示例:
// 引入 events 模塊
var events = require('events');
// 建立 eventEmitter 對象
var eventEmitter = new events.EventEmitter();

// 建立事件處理程序
var connectHandler = function connected() {
   console.log('鏈接成功。');
  
   // 觸發 data_received 事件 
   eventEmitter.emit('data_received');
}

// 綁定 connection 事件處理程序
eventEmitter.on('connection', connectHandler);
 
// 使用匿名函數綁定 data_received 事件
eventEmitter.on('data_received', function(){
   console.log('數據接收成功。');
});

// 觸發 connection 事件 
eventEmitter.emit('connection');

console.log("程序執行完畢。");
  • Node.js Buffer(緩衝區),定義了一個 Buffer 類,該類用來建立一個專門存放二進制數據的緩存區,Node.js 目前支持的字符編碼包括:ascii ,utf8,utf16le ,ucs2 ,base64 ,latin1 ,binary ,hex。
const buf = new Buffer('zhangda', 'ascii');

console.log(buf.toString('hex'));
console.log(buf.toString('base64'));
  • Node.js Stream(流)
    從流中讀取數據:
var fs = require("fs");
var data = '';

// 建立可讀流
var readerStream = fs.createReadStream('input.txt');

// 設置編碼爲 utf8。
readerStream.setEncoding('UTF8');

// 處理流事件 --> data, end, and error
readerStream.on('data', function(chunk) {
   data += chunk;
});

readerStream.on('end',function(){
   console.log(data);
});

readerStream.on('error', function(err){
   console.log(err.stack);
});

console.log("程序執行完畢");

寫入流:web

var fs = require("fs");
var data = '菜鳥教程官網地址:www.runoob.com';

// 建立一個能夠寫入的流,寫入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt');

// 使用 utf8 編碼寫入數據
writerStream.write(data,'UTF8');

// 標記文件末尾
writerStream.end();

// 處理流事件 --> data, end, and error
writerStream.on('finish', function() {
    console.log("寫入完成。");
});

writerStream.on('error', function(err){
   console.log(err.stack);
});

console.log("程序執行完畢");

管道流(讀取一個文件內容並將內容寫入到另一個文件中)npm

var fs = require("fs");

// 建立一個可讀流
var readerStream = fs.createReadStream('input.txt');

// 建立一個可寫流
var writerStream = fs.createWriteStream('output.txt');

// 管道讀寫操做
// 讀取 input.txt 文件內容,並將內容寫入到 output.txt 文件中
readerStream.pipe(writerStream);

console.log("程序執行完畢");
  • Node.js模塊系統,爲了讓Node.js的文件能夠相互調用,Node.js提供了一個簡單的模塊系統。引入hello.js以下:
var hello = require('./hello');
hello.world();

hello.js以下:設計模式

exports.world = function() {
  console.log('Hello World');
}
  • Node.js GET/POST請求
    獲取get請求內容:
var http = require('http');
var url = require('url');
var util = require('util');
 
http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
    res.end(util.inspect(url.parse(req.url, true)));
}).listen(3000);

獲取post請求內容:瀏覽器

var http = require('http');
var querystring = require('querystring');
 
http.createServer(function(req, res){
    // 定義了一個post變量,用於暫存請求體的信息
    var post = '';     
 
    // 經過req的data事件監聽函數,每當接受到請求體的數據,就累加到post變量中
    req.on('data', function(chunk){    
        post += chunk;
    });
 
    // 在end事件觸發後,經過querystring.parse將post解析爲真正的POST請求格式,而後向客戶端返回。
    req.on('end', function(){    
        post = querystring.parse(post);
        res.end(util.inspect(post));
    });
}).listen(3000);
  • Node.js Web 模塊,可使用node.js搭建web服務器,運行入口js文件後,須要將html文件放在當前目錄下,入口js文件以下:
var http = require('http');
var fs = require('fs');
var url = require('url');
 
 
// 建立服務器
http.createServer( function (request, response) {  
   // 解析請求,包括文件名
   var pathname = url.parse(request.url).pathname;
   
   // 輸出請求的文件名
   console.log("Request for " + pathname + " received.");
   
   // 從文件系統中讀取請求的文件內容
   fs.readFile(pathname.substr(1), function (err, data) {
      if (err) {
         console.log(err);
         // HTTP 狀態碼: 404 : NOT FOUND
         // Content Type: text/plain
         response.writeHead(404, {'Content-Type': 'text/html'});
      }else{             
         // HTTP 狀態碼: 200 : OK
         // Content Type: text/plain
         response.writeHead(200, {'Content-Type': 'text/html'});    
         
         // 響應文件內容
         response.write(data.toString());        
      }
      //  發送響應數據
      response.end();
   });   
}).listen(8080);
 
// 控制檯會輸出如下信息
console.log('Server running at http://127.0.0.1:8080/');
相關文章
相關標籤/搜索