成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Node.js 中度體驗(yàn)

CastlePeaK / 717人閱讀

摘要:創(chuàng)建簡(jiǎn)單應(yīng)用使用指令來(lái)載入模塊創(chuàng)建服務(wù)器使用方法創(chuàng)建服務(wù)器,并使用方法綁定端口。全局安裝將安裝包放在下。的核心就是事件觸發(fā)與事件監(jiān)聽器功能的封裝。通常我們用于從一個(gè)流中獲取數(shù)據(jù)并將數(shù)據(jù)傳遞到另外一個(gè)流中。壓縮文件為文件壓縮完成。

創(chuàng)建簡(jiǎn)單應(yīng)用

使用 require 指令來(lái)載入 http 模塊

var http = require("http");

創(chuàng)建服務(wù)器

使用 http.createServer() 方法創(chuàng)建服務(wù)器,并使用 listen 方法綁定 8888 端口。 函數(shù)通過(guò) request,
response 參數(shù)來(lái)接收和響應(yīng)數(shù)據(jù)

http.createServer(function (request, response) {

    // 發(fā)送 HTTP 頭部 
    // HTTP 狀態(tài)值: 200 : OK
    // 內(nèi)容類型: text/plain
    response.writeHead(200, {"Content-Type": "text/plain"});

    // 發(fā)送響應(yīng)數(shù)據(jù) "Tangkang is a boy"
    response.end("Tangkang is a boy
");
}).listen(8888);

運(yùn)行腳本

此時(shí)端口已經(jīng)開啟監(jiān)聽,等候http請(qǐng)求

NPM管理工具

NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問(wèn)題

使用npm可以安裝別人的代碼 也可以發(fā)布自己的代碼到npm服務(wù)器

全局安裝和本地安裝

本地安裝

將安裝包放在 ./node_modules 下(運(yùn)行 npm 命令時(shí)所在的目錄),如果沒有 node_modules 目錄,會(huì)在當(dāng)前執(zhí)行
npm 命令的目錄下生成 node_modules 目錄。 可以通過(guò) require() 來(lái)引入本地安裝的包。

全局安裝

將安裝包放在 /usr/local 下。
可以直接在命令行里使用。
不能通過(guò) require() 來(lái)引入本地安裝的包。

使用npm安裝本地express包

$ npm install express

express 包就放在了工程目錄下的 node_modules 目錄中

var express = require("express"); #代碼中直接使用

npm install express -g # 全局安裝

查看所有安裝包

$ npm ls  查看本地安裝包

$ npm ls -g 查看全局安裝包

$ npm uninstall express 卸載模塊
$ npm update    express 更新模塊
$ npm search    express 搜索模塊
Node.js REPL(交互式解釋器)

其中下劃線 _ 獲取表達(dá)式變量

Node.js 回調(diào)函數(shù)

阻塞執(zhí)行

腳本阻塞執(zhí)行 文件讀取完畢 才執(zhí)行下一步

var fs = require("fs");

var data = fs.readFileSync("./nodejs/t.txt"); // 讀取文件內(nèi)容

console.log(data.toString());
console.log("輸出完畢");

非阻塞執(zhí)行

腳本非阻塞執(zhí)行 不需要文件讀取完畢就能執(zhí)行下一步

var fs = require("fs");
fs.readFile("./nodejs/t.txt", function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});
console.log("輸出完畢")
Node.js 事件循環(huán)

Node.js 是單進(jìn)程單線程應(yīng)用程序,但是通過(guò)事件和回調(diào)支持并發(fā)
Node.js 使用事件驅(qū)動(dòng)模型,當(dāng)web server接收到請(qǐng)求,就把它關(guān)閉然后進(jìn)行處理,然后去服務(wù)下一個(gè)web請(qǐng)求
所有的事件基于觀察者模式 接到請(qǐng)求就觸發(fā)

事件實(shí)例

    // 引入 events 模塊
    var events = require("events");
    
    // 創(chuàng)建 eventEmitter 對(duì)象
    var eventEmitter = new events.EventEmitter();
    
    // 綁定事件及事件的處理程序
    eventEmitter.on("eventName", eventHandler);
    
    // 觸發(fā)事件
    eventEmitter.emit("eventName");

讀取文件

var fs = require("fs");

fs.readFile("login.html", function (err, data) {
    if (err){
        console.log(err.stack);
        return;
    }
    console.log(data.toString());
});
console.log("程序執(zhí)行完畢");
Node.js EventEmitter

EventEmitter 類

events 模塊只提供了一個(gè)對(duì)象: events.EventEmitter。EventEmitter
的核心就是事件觸發(fā)與事件監(jiān)聽器功能的封裝。 你可以通過(guò)require("events");來(lái)訪問(wèn)該模塊。

同一個(gè)時(shí)間可以綁定多次 觸發(fā)時(shí)候可以觸發(fā)多次
var events = require("events");
var emitter = new events.EventEmitter();
emitter.on("sayLove", function(arg1, arg2) {
    console.log("我愛你但是我沒錢", arg1, arg2);
});
emitter.on("sayLove", function(arg1, arg2) {
    console.log("我沒錢我也不愛你", arg1, arg2);
});
emitter.emit("sayLove", "我愛你", "你愛我");

error 事件

var events = require("events"); 
var emitter = new events.EventEmitter(); 
emitter.emit("error");
Node.js Buffer(緩沖區(qū))

創(chuàng)建 Buffer 類

var buf = new Buffer(10);// 建立空數(shù)組

var buf = new Buffer([10, 20, 30, 40, 50]);// 給定數(shù)組創(chuàng)建buffer

var buf = new Buffer("smudge", "utf-8"); // 字符串創(chuàng)建buffer

寫入緩沖區(qū)

返回實(shí)際寫入的大小

buf = new Buffer(256);
len = buf.write("smduge");
console.log("寫入字節(jié)數(shù) : "+  len);

緩沖區(qū)讀取數(shù)據(jù)

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

console.log( buf.toString("utf8",0,5));    // 輸出: abcde

將 Buffer 轉(zhuǎn)換為 JSON 對(duì)象(類似php數(shù)組轉(zhuǎn)JSON)

var buf = new Buffer(5); // 5個(gè)隨機(jī)數(shù)
var json = buf.toJSON(buf);

console.log(json);

緩沖區(qū)合并(類似php合并數(shù)組)

var confession = new Buffer("我愛你!");
var reject = new Buffer("我們還是好朋友");
var cothurnus = Buffer.concat([confession,reject]);
console.log(cothurnus.toString());

緩沖區(qū)比較

var buffer1 = new Buffer("ABC");
var buffer2 = new Buffer("ABCD");
var result = buffer1.compare(buffer2);
console.log(result); // -1 buffer1 在 buffer2 之前

緩沖區(qū)拷貝(類似PHP數(shù)組賦值)

var buffer1 = new Buffer("ABC");
// 拷貝一個(gè)緩沖區(qū)
var buffer2 = new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2 content: " + buffer2.toString());

緩沖區(qū)裁剪(類似PHP數(shù)組分割)

var buffer1 = new Buffer("smudge");
// 剪切緩沖區(qū)
var buffer2 = buffer1.slice(0,3);
console.log("buffer2 content: " + buffer2.toString()); // smu

緩沖區(qū)長(zhǎng)度(類似PHP數(shù)組長(zhǎng)度)

var name = new Buffer("smudge");

console.log(name.length); // 6
Node.js Stream(流)

Stream 是一個(gè)抽象接口,Node 中有很多對(duì)象實(shí)現(xiàn)了這個(gè)接口。例如,對(duì)http 服務(wù)器發(fā)起請(qǐng)求的request 對(duì)象就是一個(gè)Stream,還有stdout(標(biāo)準(zhǔn)輸出)。

Node.js,Stream 有四種流類型

Readable - 可讀操作。
Writable - 可寫操作。
Duplex - 可讀可寫操作.
Transform - 操作被寫入數(shù)據(jù),然后讀出結(jié)果。

Stream 對(duì)象都是 EventEmitter 的實(shí)例

data - 當(dāng)有數(shù)據(jù)可讀時(shí)觸發(fā)。

end - 沒有更多的數(shù)據(jù)可讀時(shí)觸發(fā)。

error - 在接收和寫入過(guò)程中發(fā)生錯(cuò)誤時(shí)觸發(fā)

finish - 所有數(shù)據(jù)已被寫入到底層系統(tǒng)時(shí)觸發(fā)

從流中讀取數(shù)據(jù)

var fs = require("fs");

var string = "";

// 創(chuàng)建可讀流
var readerStream = fs.createReadStream("smudge.txt");

// 設(shè)置編碼
readerStream.setEncoding("UTF8");

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

readerStream.on("end",function(){
    console.log(string);
});

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

寫入流

var fs = require("fs");
var data = "對(duì)我來(lái)說(shuō)打發(fā)時(shí)間的方式只有一個(gè)抱著你睡覺";

// 創(chuàng)建一個(gè)可以寫入的流,寫入到文件 output.txt 中
var writerStream = fs.createWriteStream("love.txt");

// 使用 utf8 編碼寫入數(shù)據(jù)
writerStream.write(data,"UTF8");

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

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

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

管道流

管道提供了一個(gè)輸出流到輸入流的機(jī)制。通常我們用于從一個(gè)流中獲取數(shù)據(jù)并將數(shù)據(jù)傳遞到另外一個(gè)流中。
實(shí)現(xiàn)了大文件的復(fù)制過(guò)程

var fs = require("fs");

// 創(chuàng)建一個(gè)可讀流
var readerStream = fs.createReadStream("love.txt");

// 創(chuàng)建一個(gè)可寫流
var writerStream = fs.createWriteStream("smduge.txt"); // 存在同名文件也會(huì)新建文件

// 管道讀寫操作
// 讀取 input.txt 文件內(nèi)容,并將內(nèi)容寫入到 output.txt 文件中
readerStream.pipe(writerStream);

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

鏈?zhǔn)搅?/p>

鏈?zhǔn)绞峭ㄟ^(guò)連接輸出流到另外一個(gè)流并創(chuàng)建多個(gè)對(duì)個(gè)流操作鏈的機(jī)制。鏈?zhǔn)搅饕话阌糜诠艿啦僮鳌?/b>

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

// 壓縮 input.txt 文件為 input.txt.gz
fs.createReadStream("smudge.txt")
    .pipe(zlib.createGzip())
    .pipe(fs.createWriteStream("smudge.txt.gz"));

console.log("文件壓縮完成。");
聲明

文章全部來(lái)自 http://www.runoob.com/nodejs/nodejs-tutorial.html 我只是自己精讀一遍 順便做了這個(gè)筆記

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79659.html

相關(guān)文章

  • 《2017 中國(guó)云計(jì)算評(píng)測(cè)報(bào)告》發(fā)布,各大云平臺(tái)用戶體驗(yàn)得分出爐

    摘要:首先告訴大家這份中國(guó)云計(jì)算評(píng)測(cè)報(bào)告是如何產(chǎn)生的,以免有讀者懷疑其嚴(yán)謹(jǐn)性。根據(jù)聽云此次的分值計(jì)算標(biāo)準(zhǔn),評(píng)分結(jié)果如圖上所示。云計(jì)算(Cloud Computing)從概念提出到現(xiàn)在已經(jīng)走過(guò)了風(fēng)云變幻十余載,整個(gè)產(chǎn)業(yè)相對(duì)成熟,同時(shí)行業(yè)集中度也越來(lái)越高,主流市場(chǎng)被業(yè)內(nèi)眾所周知的幾家大公司把持。目前物聯(lián)網(wǎng)、人工智能正處于眾人追捧的風(fēng)口,兩者的發(fā)展都離不開云計(jì)算的加持,因此云計(jì)算服務(wù)商之間的強(qiáng)強(qiáng)對(duì)決也是...

    Shihira 評(píng)論0 收藏0
  • 龍圖 VP 李翀:數(shù)據(jù)化運(yùn)營(yíng)及云計(jì)算下的運(yùn)維

    摘要:文龍圖李翀?jiān)牡刂樊?dāng)游戲遇上大數(shù)據(jù)和云計(jì)算談數(shù)據(jù)化運(yùn)營(yíng)及云計(jì)算下的運(yùn)維龍圖做了年的游戲,真正快速發(fā)展起來(lái)是在移動(dòng)互聯(lián)網(wǎng)這個(gè)時(shí)代。刀塔傳奇遇上大數(shù)據(jù),現(xiàn)在在整個(gè)運(yùn)營(yíng)和運(yùn)維過(guò)程中,每天產(chǎn)生日志文件已經(jīng)達(dá)到級(jí)的水平。 showImg(http://lock522.b0.upaiyun.com/%E9%BE%99%E5%9B%BEVP%20%E6%9D%8E%E7%BF%80.JPG); 文 ...

    Java_oldboy 評(píng)論0 收藏0
  • 龍圖 VP 李翀:數(shù)據(jù)化運(yùn)營(yíng)及云計(jì)算下的運(yùn)維

    摘要:文龍圖李翀?jiān)牡刂樊?dāng)游戲遇上大數(shù)據(jù)和云計(jì)算談數(shù)據(jù)化運(yùn)營(yíng)及云計(jì)算下的運(yùn)維龍圖做了年的游戲,真正快速發(fā)展起來(lái)是在移動(dòng)互聯(lián)網(wǎng)這個(gè)時(shí)代。刀塔傳奇遇上大數(shù)據(jù),現(xiàn)在在整個(gè)運(yùn)營(yíng)和運(yùn)維過(guò)程中,每天產(chǎn)生日志文件已經(jīng)達(dá)到級(jí)的水平。 showImg(http://lock522.b0.upaiyun.com/%E9%BE%99%E5%9B%BEVP%20%E6%9D%8E%E7%BF%80.JPG); 文 ...

    JerryC 評(píng)論0 收藏0
  • IDC:2017年中國(guó)公有云服務(wù)市場(chǎng)超40億美金

    摘要:報(bào)告顯示,年排名前五的中國(guó)公有云廠商市場(chǎng)份額有所變化。此外,隨著一帶一路政策的發(fā)布和推進(jìn),中國(guó)企業(yè)出海需求旺盛,而成長(zhǎng)為具有全球化視野的云服務(wù)商,也對(duì)云廠商的服務(wù)能力提出了新的要求。報(bào)告顯示,2017年排名前五的中國(guó)公有云IaaS廠商市場(chǎng)份額有所變化。其中,阿里云繼續(xù)保持市場(chǎng)領(lǐng)軍位置,全年市場(chǎng)份額相比去年進(jìn)一步提升,達(dá)到45.5%;騰訊云穩(wěn)居第二,市場(chǎng)份額突破10% ;中國(guó)電信排名第三,同比...

    Bmob 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<