摘要:創(chuàng)建簡單應用使用指令來載入模塊創(chuàng)建服務器使用方法創(chuàng)建服務器,并使用方法綁定端口。全局安裝將安裝包放在下。的核心就是事件觸發(fā)與事件監(jiān)聽器功能的封裝。通常我們用于從一個流中獲取數(shù)據(jù)并將數(shù)據(jù)傳遞到另外一個流中。壓縮文件為文件壓縮完成。
創(chuàng)建簡單應用
使用 require 指令來載入 http 模塊
var http = require("http");
創(chuàng)建服務器
使用 http.createServer() 方法創(chuàng)建服務器,并使用 listen 方法綁定 8888 端口。 函數(shù)通過 request,
response 參數(shù)來接收和響應數(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ā)送響應數(shù)據(jù) "Tangkang is a boy" response.end("Tangkang is a boy "); }).listen(8888);
運行腳本
NPM管理工具此時端口已經(jīng)開啟監(jiān)聽,等候http請求
NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問題
使用npm可以安裝別人的代碼 也可以發(fā)布自己的代碼到npm服務器
全局安裝和本地安裝
本地安裝
將安裝包放在 ./node_modules 下(運行 npm 命令時所在的目錄),如果沒有 node_modules 目錄,會在當前執(zhí)行
npm 命令的目錄下生成 node_modules 目錄。 可以通過 require() 來引入本地安裝的包。全局安裝
將安裝包放在 /usr/local 下。
可以直接在命令行里使用。
不能通過 require() 來引入本地安裝的包。
使用npm安裝本地express包
$ npm install expressexpress 包就放在了工程目錄下的 node_modules 目錄中
var express = require("express"); #代碼中直接使用npm install express -g # 全局安裝
查看所有安裝包
Node.js REPL(交互式解釋器)$ npm ls 查看本地安裝包$ npm ls -g 查看全局安裝包$ npm uninstall express 卸載模塊 $ npm update express 更新模塊 $ npm search express 搜索模塊
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í)行
Node.js 事件循環(huán)腳本非阻塞執(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 是單進程單線程應用程序,但是通過事件和回調(diào)支持并發(fā)
Node.js 使用事件驅(qū)動模型,當web server接收到請求,就把它關(guān)閉然后進行處理,然后去服務下一個web請求
所有的事件基于觀察者模式 接到請求就觸發(fā)
事件實例
// 引入 events 模塊 var events = require("events"); // 創(chuàng)建 eventEmitter 對象 var eventEmitter = new events.EventEmitter(); // 綁定事件及事件的處理程序 eventEmitter.on("eventName", eventHandler); // 觸發(fā)事件 eventEmitter.emit("eventName");
讀取文件
Node.js EventEmittervar fs = require("fs"); fs.readFile("login.html", function (err, data) { if (err){ console.log(err.stack); return; } console.log(data.toString()); }); console.log("程序執(zhí)行完畢");
EventEmitter 類
events 模塊只提供了一個對象: events.EventEmitter。EventEmitter
的核心就是事件觸發(fā)與事件監(jiān)聽器功能的封裝。 你可以通過require("events");來訪問該模塊。同一個時間可以綁定多次 觸發(fā)時候可以觸發(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 事件
Node.js Buffer(緩沖區(qū))var events = require("events"); var emitter = new events.EventEmitter(); emitter.emit("error");
創(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ū)
返回實際寫入的大小
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 對象(類似php數(shù)組轉(zhuǎn)JSON)
var buf = new Buffer(5); // 5個隨機數(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"); // 拷貝一個緩沖區(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ū)長度(類似PHP數(shù)組長度)
Node.js Stream(流)var name = new Buffer("smudge"); console.log(name.length); // 6
Stream 是一個抽象接口,Node 中有很多對象實現(xiàn)了這個接口。例如,對http 服務器發(fā)起請求的request 對象就是一個Stream,還有stdout(標準輸出)。
Node.js,Stream 有四種流類型
Readable - 可讀操作。
Writable - 可寫操作。
Duplex - 可讀可寫操作.
Transform - 操作被寫入數(shù)據(jù),然后讀出結(jié)果。
Stream 對象都是 EventEmitter 的實例
data - 當有數(shù)據(jù)可讀時觸發(fā)。
end - 沒有更多的數(shù)據(jù)可讀時觸發(fā)。
error - 在接收和寫入過程中發(fā)生錯誤時觸發(fā)
finish - 所有數(shù)據(jù)已被寫入到底層系統(tǒng)時觸發(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 = "對我來說打發(fā)時間的方式只有一個抱著你睡覺"; // 創(chuàng)建一個可以寫入的流,寫入到文件 output.txt 中 var writerStream = fs.createWriteStream("love.txt"); // 使用 utf8 編碼寫入數(shù)據(jù) 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); });
管道流
管道提供了一個輸出流到輸入流的機制。通常我們用于從一個流中獲取數(shù)據(jù)并將數(shù)據(jù)傳遞到另外一個流中。
實現(xiàn)了大文件的復制過程var fs = require("fs"); // 創(chuàng)建一個可讀流 var readerStream = fs.createReadStream("love.txt"); // 創(chuàng)建一個可寫流 var writerStream = fs.createWriteStream("smduge.txt"); // 存在同名文件也會新建文件 // 管道讀寫操作 // 讀取 input.txt 文件內(nèi)容,并將內(nèi)容寫入到 output.txt 文件中 readerStream.pipe(writerStream); console.log("程序執(zhí)行完畢");
鏈式流
聲明鏈式是通過連接輸出流到另外一個流并創(chuàng)建多個對個流操作鏈的機制。鏈式流一般用于管道操作。
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("文件壓縮完成。");
文章全部來自 http://www.runoob.com/nodejs/nodejs-tutorial.html 我只是自己精讀一遍 順便做了這個筆記
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/79659.html
摘要:首先告訴大家這份中國云計算評測報告是如何產(chǎn)生的,以免有讀者懷疑其嚴謹性。根據(jù)聽云此次的分值計算標準,評分結(jié)果如圖上所示。云計算(Cloud Computing)從概念提出到現(xiàn)在已經(jīng)走過了風云變幻十余載,整個產(chǎn)業(yè)相對成熟,同時行業(yè)集中度也越來越高,主流市場被業(yè)內(nèi)眾所周知的幾家大公司把持。目前物聯(lián)網(wǎng)、人工智能正處于眾人追捧的風口,兩者的發(fā)展都離不開云計算的加持,因此云計算服務商之間的強強對決也是...
摘要:文龍圖李翀原文地址當游戲遇上大數(shù)據(jù)和云計算談數(shù)據(jù)化運營及云計算下的運維龍圖做了年的游戲,真正快速發(fā)展起來是在移動互聯(lián)網(wǎng)這個時代。刀塔傳奇遇上大數(shù)據(jù),現(xiàn)在在整個運營和運維過程中,每天產(chǎn)生日志文件已經(jīng)達到級的水平。 showImg(http://lock522.b0.upaiyun.com/%E9%BE%99%E5%9B%BEVP%20%E6%9D%8E%E7%BF%80.JPG); 文 ...
摘要:文龍圖李翀原文地址當游戲遇上大數(shù)據(jù)和云計算談數(shù)據(jù)化運營及云計算下的運維龍圖做了年的游戲,真正快速發(fā)展起來是在移動互聯(lián)網(wǎng)這個時代。刀塔傳奇遇上大數(shù)據(jù),現(xiàn)在在整個運營和運維過程中,每天產(chǎn)生日志文件已經(jīng)達到級的水平。 showImg(http://lock522.b0.upaiyun.com/%E9%BE%99%E5%9B%BEVP%20%E6%9D%8E%E7%BF%80.JPG); 文 ...
摘要:報告顯示,年排名前五的中國公有云廠商市場份額有所變化。此外,隨著一帶一路政策的發(fā)布和推進,中國企業(yè)出海需求旺盛,而成長為具有全球化視野的云服務商,也對云廠商的服務能力提出了新的要求。報告顯示,2017年排名前五的中國公有云IaaS廠商市場份額有所變化。其中,阿里云繼續(xù)保持市場領(lǐng)軍位置,全年市場份額相比去年進一步提升,達到45.5%;騰訊云穩(wěn)居第二,市場份額突破10% ;中國電信排名第三,同比...
閱讀 1592·2021-11-24 11:16
閱讀 2861·2021-07-28 12:32
閱讀 2394·2019-08-30 11:22
閱讀 1500·2019-08-30 11:01
閱讀 676·2019-08-29 16:24
閱讀 3623·2019-08-29 12:52
閱讀 1695·2019-08-29 12:15
閱讀 1398·2019-08-29 11:18