nodejs 基礎學習筆記

單線程 單進程 非阻塞 事件驅動。html

句柄就是函數node

事件驅動模型mysql

事件源-》觸發事件《-》監聽事件程序-》事件處理程序es6

 

路徑的要求不嚴格web

 

node的知識點:正則表達式

1. node的http模塊,sql

var http = require('http');mongodb

http.createServer(function(req, res){express

  res.writeHeader(200, {'Content-Type': 'text/plain'});         //寫入文件頭npm

  res.end('Hello World!');  //瀏覽器中的輸出

}).listen('8888');

 

2. fs模塊的方法

能夠讀取文件、文件夾,建立刪除文件、文件夾,截取文件內容,修改權限、羣組等,用的時候再看吧,這裏會用到buffer,具體的不清楚呢?

讀取文件模塊 readFile,readFileAync

var fs = require('fs');

fs.readFile('input.txt', function(err, data){  //異步讀取文件

  console.log(data);

})

var data = fs.readFileAync('input.txt');   //同步讀取文件

console.log(data);

 

fs的stream流, createReadStream(),  createWriteStream()

var fs = require('fs');

var data = '';

var readStream = fs.createReadStream('input.txt');  //這個異步執行的, 按順序放到事件執行隊列中

readStream.on('data', function(chunk){

  data += chunk;

})

readStream.on('end', function(){

  console.log(data);

})

readStream.on('error', function(err){

  console.log(err.stack);

})

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

writeStream.end();

writeStream.on('finish', function(){

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

})

writeStream.on('error', function(err){

  console.log(err.stack);

})

 

3. buffer 理解就是一個存儲類型,和Array相似,只是能夠存儲二進制數據,而且能夠指定數據格式

 

4. events 對象,內部只有一個EmitterEvent方法

var events = require('events').EventEmitter;

var eventsEmitter = new events();

eventsEmitter.on('eventName', functionName);

eventsEmitter.addListener('eventName', functionName);  //on 和 addListener效果是同樣的

每種方法的添加事件數量默認是10個,若是超過10個會有警告,能夠修改這個默認數量

eventsEmitter.setMaxListeners(21);

//刪除某個監聽函數
eventsEmitter.removeListener('eventName', fnName);
//刪除對象上全部的監聽函數
eventsEmitter.removeAllListeners();
//刪除某類監聽函數
eventsEmitter.removeAllListeners('eventName');
//監聽的數量
console.log(eventsEmitter.listeners('eventName').length);
console.log(EventEmitter.listenerCount(eventsEmitter, 'eventName'));
 
5. node的模塊引入和導出
經過require取得模塊,經過exports暴露模塊,和es6的語法不一樣。
exports暴露模塊有兩種方式,一種直接寫
exports.sayHello = function(){
  alert(1);
}
這種導出的是exports,exports上包含定義的方法,使用方式是
var hello = require('./hello.js');  //要是用./表示當前目錄下, hello至關於exports
hello.sayHello();
 
一種是module.exports = function SayName(){
  console.log(3);
}
這種導出的是函數自己,使用方法
var say = require('./hello.js');  //名字能夠不一致
say();
var say2 = new say();
 
若是一個文件中暴露多個函數或類呢?
 
這裏涉及到了文件緩存取,原生模塊,文件模塊,原生模塊緩存區?
這樣作的目的是節省內存,防止文件屢次被加載
 
 
6. 路由解析 有兩個模塊,分別是url模塊和querystring
                      url.parse(string).query | url.parse(string).pathname | | | | | ------ ------------------- http://localhost:8888/start?foo=bar&hello=world --- ----- | | | | querystring.parse(queryString)["foo"] | | querystring.parse(queryString)["hello"]
url有實例方法,有類方法,url.parse()是類方法,
var  url = require('url');
var querystring = require('querystring');
var defaultUrl = ' http://localhost:8888/start?foo=bar&hello=world';
var query = url.parse(defaultUrl).query;
var foo = querystring.parse(query)['foo'];
或者
var query = url.parse(defaultUrl, true).query;   //第二個參數是true的,會解析成對象形式{foo: bar, hello: world};
var foo = query.foo;
 
 
 
7. nodejs的全局對象和全局變量
global
__filename ,當前執行文件的絕對路徑,包含文件
__dirname, 當前執行文件的絕對路徑,不包含文件
setTimeout,clearTimeout,setInterval,clearInterval
console方法
process對象,有屬性,方法,能夠讀取系統參數,增長結束進程等等
 
8. util是nodejs的核心模塊,提供經常使用函數的集合
經常使用的有
util.inherits(constructor, superConstructor),是一個實現對象間原型繼承的方法。只能繼承原型上的方法,對象內的屬性和方法不能繼承。
util.inspect(object,[showHidden],[depth],[colors]),將一個對象轉換爲字符串的方法,一般用於調試和錯誤輸出。

showHidden 是一個可選參數,若是值爲 true,將會輸出更多隱藏信息。

depth 表示最大遞歸的層數,若是對象很複雜,你能夠指定層數以控制輸出信息的多 少。若是不指定depth,默認會遞歸2層,指定爲 null 表示將不限遞歸層數完整遍歷對象。 若是color 值爲 true,輸出格式將會以ANSI 顏色編碼,一般用於在終端顯示更漂亮 的效果。

util.isArray(object),若是給定的參數 "object" 是一個數組返回true,不然返回false。

util.isDate(object),若是給定的參數 "object" 是一個日期返回true,不然返回false。

util.isRegExp(object),若是給定的參數 "object" 是一個正則表達式返回true,不然返回false。

util.isError(object),若是給定的參數 "object" 是一個錯誤對象返回true,不然返回false。

更多詳情能夠訪問 http://nodejs.org/api/util.html 瞭解詳細內容。

 
9. post和get 請求
get直接取url中的參數,
post監聽事件
var http = require('http');
var querystring = require('querystring');
var postHTML = '<html><head><meta charset="utf-8"><title>菜鳥教程 Node.js 實例</title></head>' + '<body>' + '<form method="post">' + '網站名: <input name="name"><br>' + '網站 URL: <input name="url"><br>' + '<input type="submit">' + '</form>' + '</body></html>';
http.createServer(function (req, res) {
  var body = "";
  req.on('data', function (chunk) {
    body += chunk;
  });
  req.on('end', function () {
    // 解析參數
    body = querystring.parse(body);
    // 設置響應頭部信息及編碼
    res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});
    if(body.name && body.url) {
      // 輸出提交的數據
      res.write("網站名:" + body.name); res.write("<br>");
      res.write("網站 URL:" + body.url);
    } else {
      // 輸出表單
      res.write(postHTML);
    }
    res.end();
  });
}).listen(3000);
 
10. nodejs工具模塊
os模塊,提供了一些基本的系統操做函數
var os = require('os');

console.log('操做系統的默認臨時文件夾: ', os.tmpdir());
console.log(' CPU 的字節序: ', os.endianness());
console.log('操做系統的主機名: ', os.hostname());
console.log('操做系統名: ', os.type());
console.log('操做系統名: ', os.platform());
console.log('操做系統 CPU 架構: ', os.arch());
console.log('操做系統的發行版本: ', os.release());
console.log('操做系統運行的時間,以秒爲單位: ', os.uptime());
console.log('一個包含 一、五、15 分鐘平均負載的數組: ', os.loadavg());
console.log('系統內存總量,單位爲字節: ', os.totalmem());
console.log('操做系統空閒內存量,單位是字節: ', os.freemem());
console.log('返回一個對象數組,包含所安裝的每一個 CPU/內核的信息:型號、速度(單位 MHz)、時間(一個包含 user、nice、sys、idle 和 irq 所使用 CPU/內核毫秒數的對象): ', os.cpus());
console.log('得到網絡接口列表: ', os.networkInterfaces());

這個有些和nodejs的全局對象process功能重合,只是process的是屬性,如process.platform
 
path模塊提供了一些用於處理文件路徑的小工具,規範化路徑,合併路徑,轉爲絕對或相對路徑。。
 
net模塊,能夠建立服務器,建立客戶端,有不少網絡相關的方法和屬性,這個和http有什麼區別呢
net創建的是TCP服務器(傳輸層),http創建的是http服務器(應用層),這個還須要深刻了解
 
dns模塊,用於解析域名,獲取IP地址等
 
domain模塊,簡化異步代碼的異常處理,能夠捕捉try catch沒法捕獲的異常
對於事件捕獲異常有add和remove
 
 
web模塊指的是http模塊,能夠寫服務器端,也能夠寫客戶端,模擬客戶端請求,根據截取的路徑請求文件,將文件輸出到服務器
 

Express 是一個簡潔而靈活的 node.js Web應用框架, 提供了一系列強大特性幫助你建立各類 Web 應用,和豐富的 HTTP 工具。

使用 Express 能夠快速地搭建一個完整功能的網站。

Express 框架核心特性:

能夠設置中間件來響應 HTTP 請求。

定義了路由表用於執行不一樣的 HTTP 請求動做。

能夠經過向模板傳遞參數來動態渲染 HTML 頁面。

須要結合三個中間件,分別是body-parser, cookie-parser, multer 

body-parser - node.js 中間件,用於處理 JSON, Raw, Text 和 URL 編碼的數據。

cookie-parser - 這就是一個解析Cookie的工具。經過req.cookies能夠取到傳過來的cookie,並把它們轉成對象。

multer - node.js 中間件,用於處理 enctype="multipart/form-data"(設置表單的MIME編碼)的表單數據。

http://www.runoob.com/nodejs/nodejs-express-framework.html

express的中間件,數據傳遞怎麼傳呢
路由
res.send();
res.render();
res.rediect(); 
錯誤處理
 
 
restful api 是一種設計風格而不是標準

HTTP 方法
如下爲 REST 基本架構的四個方法:
GET - 用於獲取數據。

PUT - 用於更新或添加數據。

DELETE - 用於刪除數據。

POST - 用於添加數據

還有一個patch只更新服務器上的一個資源的一個屬性

restful的思想可擴展性,並向後兼容,通常使用在url中包含版本信息的方式。

分析記錄優化性能

狀態碼304緩存,302重定向

get和post請求的區別:
該文章幽默風趣,深刻淺出,通俗易懂,是我等寫博客須要參考的對象。
 
nodejs的多進程
 
JXcore
 
mysql  和 mongodb
 
node啓動服務的話會有個問題,就是每次修改後須要本身手動再起一次,而supervisor是熱啓動的工具
sudo cnpm install supervisor -g 裝到全局,用supervisor service.js  便可
  
swig模版
https://www.cnblogs.com/dupd/archive/2016/09/22/5895474.html 
相關文章
相關標籤/搜索