node入門學習(一)

来源:http://www.cnblogs.com/createGod/archive/2017/05/15/6854590.html
-Advertisement-
Play Games

一、安裝node.js 方式很多npm,git等,新手建議從官網上直接去下載node的安裝包。一鍵安裝. 二、創建一個web伺服器。 三、讀取文件的方式(同步,非同步) 1.同步 2.非同步 三、事件迴圈 四、數據緩衝區 1.向緩存區寫入數據 2.讀取緩衝區的內容 3.Buffer 轉為JSON對象 4 ...


一、安裝node.js

方式很多npm,git等,新手建議從官網上直接去下載node的安裝包。一鍵安裝.

二、創建一個web伺服器。

const http = require('http');
http.createServer(function(request,response){
    response.writeHead(200,{'Content-Type':'text/plain'});
    response.end('Hello World');
}).listen(8888);
console.log('server start http://127.0.0.1:8888')

三、讀取文件的方式(同步,非同步)

1.同步

var fs = require('fs');
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log('同步執行');

2.非同步

var fs = require('fs');
fs.readFile('input.txt',function(error,data){
    if(error){
    console.log(error);
  }; console.log(data.toString()); }); console.log(
'非同步執行')

三、事件迴圈

var events = require('events');

var eventEmitter = new  events.EventEmitter();//創建一個事件對象

function handEvent(){

    eventEmitter.emit('data_connection'); //調用 data_connection事件
};
function data_connection(){
    console.log('數據已經連接');
};
eventEmitter.on('connection',handEvent);
eventEmitter.on('data_connection',data_connection);


eventEmitter.emit('connection');   //調用,on綁定的connection事件

console.log('程式執行完畢');
/*
 * 事件 執行的過程.
 * 1. require('events')  events 模塊
 * 2.new events.EventEmitter(); 創建以事件模塊
 * 3. eventEmitter.on();  綁定事件
 * 4.eventEmitter.emit();  觸發綁定事件的函數
 * 
 */

四、數據緩衝區

1.向緩存區寫入數據

var buf = new Buffer(26);  // buf 的位元組數

var l  = buf.write('start nodejs'); // 向node Buffer緩衝區寫入數據.並返回長度
console.log('位元組長度為:' + l);   //12

2.讀取緩衝區的內容

var buf = new Buffer(26);  // buf 的位元組數

for(var i = 0; i < 26; i++){
    buf[i] = i + 97;
};

var str = buf.toString('utf8',0,8);  //buf.toString(encoding,start,end);
//編碼格式,  開始位置, 結束位置
console.log(str);

3.Buffer 轉為JSON對象

 

var buf = new Buffer('hello world');
var json = buf.toJSON(buf);

console.log(json); 
//{ type: 'Buffer',data: [ 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100 ] }

4.concat();合併幾個Buffer對象

var buf1 = new Buffer('hello');
var buf2 = new Buffer(' ');
var buf3 = new Buffer('world');
var count = Buffer.concat([buf1,buf2,buf3]); 
//Buffer.concat([]);  concat(); 中的參數必須是對象
console.log(count.toString());// hello world

5.緩衝區的比較buf1.compare();

var buf1 = new Buffer('A');
var buf2 = new Buffer('B');
var result = buf1.compare(buf2);
console.log(result); //-1;

/*
    1. result < 0;  說明 buf1 在 buf2之前
    2. result == 0;   說明 buf1 和buf2相等
    3.result > 0 ; 說明 buf2在 buf2之前

 */

6.拷貝緩衝區 buf.copy();

var buf1 = new Buffer('hello');
var buf2 = new Buffer('worl');
buf1.copy(buf2);
console.log(buf2.toString());//hello

//buf1.copy(target,start,end);
//target 拷貝的對象,start 起始位置, end 結束位置

7.緩衝區的剪切 buf.slice();

var buf1 = new Buffer('hello');
var end = buf1.slice(0,2); //he
console.log(end.toString()); //he

//buf1.slice(start,end); start.開始的位置,結束的位置

 

8.緩衝區的長度 buf.length

var buf1 = new Buffer('hello');
var l = buf1.length;
console.log(l); //5;緩衝區 長度

五、stream

1.從流中讀取數據 createReadStream();

var fs = require('fs');
var txt = '';   //用於儲存 stream.txt中的內容

//1.創建可讀的流
var readStream = fs.createReadStream('stream.txt');

//2.設置編碼格式
readStream.setEncoding('UTF8');

//3.事件流的處理 data,end,error

//a.  data 事件
readStream.on('data',function(chunk){
    txt += chunk;
});

// b  end 事件
readStream.on('end',function(){
    console.log(txt);
});

//c錯誤情況

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

console.log('執行完畢')

2.寫入流 createWriteStream();

var fs = require('fs');
var data = '這是一個寫入的stream流';

var writeStream = fs.createWriteStream('output.txt');

//寫入數據  並設置格式

writeStream.write(data,'UTF8');
writeStream.end();

//事件處理流 data end error

writeStream.on('finish',function(data){
    console.log('寫入完成')
});

console.log('程式執行完畢');

3.管道流 pipe 從一個文件讀取東西,放到另外一個文件中

var fs = require('fs');
var readStream = fs.createReadStream('output.txt');
var writeStream = fs.createWriteStream('null.txt');

//把output.txt 中的內容 寫 到null.txt中
readStream.pipe(writeStream);

console.log('寫入完畢');

4.鏈式流 通過pipe來壓縮,解壓文件

a.壓縮文件

var fs = require("fs");
var zlib = require('zlib');

// 壓縮 input.txt 文件為 input.txt.gz
fs.createReadStream('input.txt')
  .pipe(zlib.createGzip())
  .pipe(fs.createWriteStream('input.txt.gz'));
  
console.log("文件壓縮完成。");

b.解壓文件

var fs = require('fs');
var zlib = require('zlib');
fs.createReadStream('input.txt.gz')
  .pipe(zlib.createGunzip())
  .pipe(fs.createWriteStream('newInput.txt'));

console.log('解壓完畢')

 

 

六、入門學習(一)完畢。

主要知識為 1.創建web伺服器 2.同步,非同步,讀取文件的方法。

3.事件綁定機制 4.Buffer緩衝區對象 5.stream對象中的方法。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 下載對應tomcat8版本到本地後,在eclipse中添加tomcat8的對應目錄,輸入http://localhost:8080時無法顯示tomcat的index.jsp頁面(會顯示404頁面)。原因:Eclipse發佈路徑重定向了,沒有放到Tomcat下的webapp中。 解決方法:在Eclip ...
  • ConcurrentHashMap實現原理 ConcurrentHashMap源碼分析 總結 ConcurrentHashMap是Java併發包中提供的一個線程安全且高效的HashMap實現(若對HashMap的實現原理還不甚瞭解,可參考我的另一篇文章HashMap實現原理及源碼分析),Concur ...
  • 題目描述 “低價購買”這條建議是在奶牛股票市場取得成功的一半規則。要想被認為是偉大的投資者,你必須遵循以下的問題建議:“低價購買;再低價購買”。每次你購買一支股票,你必須用低於你上次購買它的價格購買它。買的次數越多越好!你的目標是在遵循以上建議的前提下,求你最多能購買股票的次數。你將被給出一段時間內 ...
  • 1、www.bejson.com線上json格式校驗工具 2、關聯兩種方式:正則表達式和json path 名稱+$. 3、charles 抓包工具,獲取介面請求方式、response、cookies和報文等信息,方便進行測試 連接手機端:proxy setting 獲取電腦的ip 修改手機 操作手 ...
  • 類與對象是不同的,類是對象的藍本,你創建出來的是對象,而它的結構由類預先定義。對象是一些操作(方法)和信息(屬性)的集合,並占據記憶體中的一塊存儲空間,你可以通過函數調用的方式讓它對它的屬性執行默寫操作。 摘自 [美】 Alasdair Allan <Learning iOS Programming> ...
  • 本篇博客是《JWebFileTrans(JDownload):一款可以從網路上下載文件的小程式》系列博客的第三篇,本篇博客的內容主要是在前兩篇的基礎上增加多線程的功能。簡言之,本篇博客截止目前所達到的功能是:基於HTTP協議的多線程斷點遠程下載小程式 ...
  • 1.所有的標記都必須要有一個相應的結束標記 以前在HTML中,你可以打開許多標簽,例如<p>和<li>而不一定寫對應的</p>和</li>來關閉它們。但在XHTML中這是不合法的。XHTML要求有嚴謹的結構,所有標簽必須關閉。如果是單獨不成對的標簽,在標簽最後加一個"/"來關閉它。 2.所有標簽的元 ...
  • 示例html代碼: 獲得id為test的DOM對象,下麵就不一一獲取了。 test.innerHTML 描述:也就是從對象的起始位置到終止位置的全部內容,包括Html標簽。 上例中的test.innerHTML的值也就是“<span style="color:red">test1</span> te ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...