文檔筆記----nodejs菜鳥教程

<html>

<head>
    <meta charset="utf-8">
    <title>文檔筆記----nodejs菜鳥教程</title>
    <meta name="keyword" content="文檔筆記----nodejs菜鳥教程">
    <meta name="discription" content="文檔筆記----nodejs菜鳥教程">
</head>

<body>
    <script>
    文檔筆記-- --nodejs菜鳥教程

    第一章 建立第一個應用
    若是咱們使用PHP來編寫後端代碼是時, 須要Apache或者Nginx服務器, 而且配上mod_php5模塊和php_cgi.
    使用nodejs時, 咱們不只僅在實現一個應用, 同時還實現了整個HTTP服務器.事實上, 咱們的Web應用以及對應的web服務器基本是同樣的

    1 引入require模塊: 用來載入node.js模塊
    var http = require("http");
    2 建立服務器: 服務器能夠監聽客戶端的需求, 相似Apache / Nginx等HTTP服務器
    3 接受請求與響應請求 拂去其端可使用瀏覽器或者終端發送HTTP請求, 服務器接受請求後返回相應數據.
    http.createServer(function(request, response) {
        //內容類型
        response.writeHead(200, { "Content-Type": "text/plain" });
        //發送響應式請求
        response.end("Hello World\n");
    }).listen(8888);

    第二章 NPM使用
    NPM是隨同Nodejs一塊兒安裝的包管理工具, 能解決Nodejs代碼部署上的不少問題, 常見的使用場景有如下幾種:
        1 容許用戶從NPM服務器下載被別人編寫的三方包到本地使用
    2 容許用戶從NPM服務器下載並安裝別人編寫的命令程序到本地使用
    3 容許用戶將本身編寫的包或者命令程序上傳到NPM服務器供別人使用

    查看版本
    npm - v

    全局安裝npm
    npm install npm - g

    安裝express到本地
    npm install express

    卸載express
    npm uninstall express

    查看安裝路徑
    npm ls

    更新express模塊
    npm update express

    建立模塊
    npm init


    第三章 Node.js REPL(交互式解釋器)

    Node自帶交互式解釋器, 能夠至此那個一下任務:
        1 讀取 - 讀取用戶輸入, 解析輸入的javascript數據結構而且存儲在內存中
    2 執行 - 執行輸入的數據結構
    3 打印 - 輸出結構
    4 循環 - 循環操做以上步驟直到用戶量詞按下ctrl + c按鈕退出

    下劃線(_) 變量
        -- > 獲取表達式運算結果

    ctrl + c 退出當前終端
    ctrl + c按兩次 退出Node REPL
    ctrl + d退出Node REPL
    向上 / 向下方向鍵 - 查看歷史命令
    tab鍵 列出當前命令
    help 列出使用命令
    clear 退出多行表達式
    save filename 保存當前的Node REPL 會話到指定文件
    load filename 載入當前Node REPL會話的文件內容


    第四章 Node.js 回調函數

    Node.js異步編程的直接提現說就是回調函數

    異步編程依託於回調函數, 但不能說使用了回調函數就能是異步編程

    阻塞代碼實例:
        var fs = require("file");
    var data = fs.readFileSync("input.txt");
    console.log(data.toString());
    console.log("程序執行結束");


    非阻塞代碼實例:
        var fs = require("file");
    fs.readFile("input.txt", function(err, data) {
        if (err) {
            return console.error(err);
        } else {
            console.log(data.toStrign());
        }
    })

    console.log("程序執行結束");


    第五章 Node.js EventEmitter
    Node.js全部的異步I / O操做在完成是都會發送到事件隊列
    events只提供了events.EventEmitter 這一個對象
    核心就是事件觸發與事件監聽功能的封裝

    //引入events模塊
    var events = require("event");
    //建立eventsEmitter對象
    var eventEmitter = new events.EventEmitter();
    //綁定事件
    event.on("some_event", function() {
        console.log("some_event觸發");
    })
    //觸發事件
    event.emit("some_event");

    第六章 Buffer(緩衝區)
    javascript語言自身只有字符串數據類型, 沒用二進制數據類型

    但在處理像TCP流或者文件流時, 必須使用到二進制數據.所以在Node.js中, 定義了一個Buffer類,
        該類用來建立一個專門存放二進制數據的緩存區

    一個Buffer相似一個整數數組, 但他對應於V8堆內存以外的一塊原始內容

    var buf = new Buffer(10) //按長度建立

    var buf = new Buffer([10, 20, 30, 40, 50]) //按給定的數組建立

    var buf = new Buffer("www.runob.com", "utf-8"); //經過一個字符串建立

    寫入緩衝區
    buf.write() //返回字節數

    從緩衝區讀數據
    buf.toString() //返回數據字符串

    轉爲JSON對象
    buf.toJSON();

    合併緩衝區
    buffer.concat(buf1, buf2, ..); //

    緩衝區比較
    buf1.compare(buf2); //

    緩衝區裁剪
    buf.slice();

    緩衝區長度
    buf.length

    第七章 Node.js Stream(流)

    Stram是一個抽象接口, Node中有不少對象實現了這個接口.例如, 對http服務器發起的request對象就是一個Stream, 還有stdout(標準輸出)
    分類:
        1 readable 可讀操做
    2 writable 可寫操做
    3 duplex 可讀可寫操做
    4 transform 操做別寫入數據, 而後讀出結果

    全部的Stream對象都是EventEmitter對象
    data: 當有數據可讀時觸發
    end: 沒有更多的數據可讀時觸發
    error: 在接收和寫入過程當中發生錯誤時觸發
    finish: 全部數據已被寫入到底層系統時觸發


    從流中讀取數據
    var fs = require("file");
    var data = '';
    //建立可讀流
    var readerStream = fs.createReadStream("input.txt");
    //設置編碼
    readerStream.setEncoding("UTF8");
    //處理流事件
    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("程序執行完畢");

    寫入流
    var fs = require("file");
    var data = "324324324";

    var writerStream = fs.createWriteStream("output.txt");

    writerStream.write(data, "UTF8");

    writerStream.end();

    writerStream.on("finish", function() {
        console.log("寫入完成");
    })
    writerStream.on("error", function(err) {
        console.log(err.stack);
    })

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

    第八章 Node.js函數

    匿名函數: 咱們能夠把一個函數做爲變量傳遞.可是咱們不必定要繞這個 "先定義,再傳遞"
    的圈子,
    咱們能夠直接在另外一個函數的括號中定義和傳遞這個函數
    execute(function(word) {
        console.log(word);
    })

    第九章 Node.js模塊系統

    爲了讓Node.js的文件能夠相互調用, Node.js提供了一個簡單的模塊系統.
    模塊是Node.js應用程序的基本組成部分, 文件和模塊是一一對應的.換言之, 一個Node.js文件就是一個模塊

    //func.js
    experts.func = function() {

    }

    module.experts = function() {

    }

    var f = require("func");

    //引入的時候前者 f.func();後者 f();
    模塊加載優先級

    開始require - > 是否在文件模塊緩存區中 - > 否 - > 是否原生模塊 - > 否 - > 查找文件模塊 - > 根據擴展名載入文件模塊 - > 返回experts
    是 - > 返回experts -
        >
        是 - > 是否在原生模塊緩存區中 - > 否 - > 加載原生模塊 - > 緩存原生模塊 - > 返回experts



    第十章 GET / POST

    GET:
        var url = require("url");

    POST:
        var querystring = require("querystring");

    第十二章 Node.js經常使用工具
    util是一個Node.js核心模塊, 提供經常使用函數的集合, 用於彌補核心javascript的功能過於精簡的不足
    util.inherits() 是一個實現對象間原型繼承的函數.
    var util = require("util");

    function Base() {

    }
    Base.prototype.showName = function() {

    }

    util.inherits(Sub, Base);
    var sub = new Sub();

    //Sub僅僅繼承了Base在原型中定義的函數,而構造函數內部的屬性和函數都咩有被Sub繼承

    util.inspect();
    //將任意對象轉爲字符串的方法

    util.isArray()
    //判斷傳入對象是否爲數組

    util.isRegExp()
    //判斷傳入參數是否爲正則

    util.isDate()
    //判斷傳入參數是否爲日期

    util.isError();
    //判斷是否爲一個錯誤的對象


    第十三章 Node.js工具模塊

    OS模塊
    Path模塊
    Net模塊
    DNS模塊
    Domain模塊


    第十四章 Node.js路由

    路由能夠經過請求的URL路徑來區別不一樣請求, 這是經過路由講請求以url路徑爲基準映射處處理程序上


    第十五章 Node.js全局對象
    javacript中有一個特殊的對象, 它及其全部屬性均可以在程序的任何地方訪問
    最外層定義的變量
    全局隨想的屬性
    隱式定義的變量

    __filename
    __dirname

    setTimeout();
    clearTimeout();
    serInterval();
    clearInterval();

    console

    process
    //用於描述當前Node.js進程狀態對象,提供了一個與操做系統的簡單接口


    第十六章 Node.js文件系統

    //異步讀取文件
    readFile(); //異步

    //同步讀取文件
    readFileSync(); //同步
    建議使用異步, 比起同步, 異步方法性能更高, 並且沒有阻塞

    var fs = require("fs");


    fs.readFile("input.txt", function(err, data) {
        if (err) {
            console.error(err.stack);
        } else {
            console.log(data.toString());
        }
    })

    var data = fs.readFileSync("input.txt");
    console.log(data.toString());


    fs.open("input.txt", function(err, fd) {

    })


    fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) {

    })
    stats

    //異步寫入文件
    fs.writeFile("input.txt", "xiruneirong", function(err) {

    })

    //關閉文件
    fs.close();

    //截取文件
    fsftruncate(fd, 10, function(err) {

    })

    //刪除文件
    fs.unlink("input.txt", function(err) {

    })

    //建立目錄
    fs.mkdir("dir", function(err) {

    })

    //讀取目錄
    fs.readdir(dir, function(err, files) {
        if (err) {
            return console.error(err);
        }
        files.forEach(function(file) {
            console.log(file);
        })
    })

    //刪除目錄
    fs.rmdir(dir, function() {

    })

    第十七章 Nodejs Express 框架

    快速打算建一個完整的網站
    Express框架核心特色:
        1 能夠設置中間件來響應http請求
    2 定義了路由變用於執行不一樣的HTTP請求
    3 能夠經過向模板傳遞參數來動態渲染HTML頁面


    var express = require("express");
    var app = express();
    app.get("/", function(req, res) {
        res.send();
    })
    app.post('/', function(req, res) {
        console.log("主頁 POST 請求");
        res.send('Hello POST');
    }) // /del_user 頁面響應
    var server app.listen(8888, function() {

    })

    Request 對象 - request 對象表示 HTTP 請求, 包含了請求查詢字符串, 參數, 內容, HTTP 頭部等屬性。 常見屬性有:
    req.app: //當callback爲外部文件時, 用req.app訪問express的實例
    req.baseUrl: 獲取路由當前安裝的URL路徑
    req.body / req.cookies: 得到「 請求主體」 / Cookies
    req.fresh / req.stale: 判斷請求是否還「 新鮮」
    req.hostname / req.ip: 獲取主機名和IP地址
    req.originalUrl: 獲取原始請求URL
    req.params: 獲取路由的parameters
    req.path: 獲取請求路徑
    req.protocol: 獲取協議類型
    req.query: 獲取URL的查詢參數串
    req.route: 獲取當前匹配的路由
    req.subdomains: 獲取子域名
    req.accepts(): 檢查可接受的請求的文檔類型
    req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages: 返回指定字符集的第一個可接受字符編碼
    req.get(): 獲取指定的HTTP請求頭
    req.is(): 判斷請求頭Content - Type的MIME類型
    Response 對象 - response 對象表示 HTTP 響應, 即在接收到請求時向客戶端發送的 HTTP 響應數據。 常見屬性有:
    res.app: 同req.app同樣
    res.append(): 追加指定HTTP頭
    res.set() 在res.append() 後將重置以前設置的頭
    res.cookie(name, value[,option]): 設置Cookie
    opition: domain / expires / httpOnly / maxAge / path / secure / signed
    res.clearCookie(): 清除Cookie
    res.download(): 傳送指定路徑的文件
    res.get(): 返回指定的HTTP頭
    res.json(): 傳送JSON響應
    res.jsonp(): 傳送JSONP響應
    res.location(): 只設置響應的Location HTTP頭, 不設置狀態碼或者close response
    res.redirect(): 設置響應的Location HTTP頭, 而且設置狀態碼302
    res.send(): 傳送HTTP響應
    res.sendFile(path[,options][,fn]): 傳送指定路徑的文件 - 會自動根據文件extension設定Content - Type
    res.set(): 設置HTTP頭, 傳入object能夠一次設置多個頭
    res.status(): 設置HTTP狀態碼
    res.type(): 設置Content - Type的MIME類型



    第十八章 RESFUL API

    表述性狀態傳遞



    第十二章 多進程
    nodejs是單線程的模式運行, 事件驅動處理併發,
    這樣有助於咱們在多核cpu的系統上建立多個子進程, 從而提升性能

    const fs = require("fs");
    const child_process = require("child_process");
    for (var i = 0; i < 3; i++) {
        var worker_process = child_process.fork("support.js".[i]);
        worker_process.on("close", function(code) {

        })

        第二十一章 mysql
        var mysql = require("mysql");
        var connection = mysql.createConnection({
            host: "127.0.0.1",
            user: "root",
            password: "",
            database: "test"
        })
        connection.query("select....", function(err, res, fields) {

        })
    }

    第二十二章 MongoDB
    var MongoClient = require('mongodb').MongoClient;
    var DB_CONN_STR = 'mongodb://127.0.0:27017/test';
    var insertData = function(db, callback) { //鏈接到表 site var collection = db.collection('site'); //插入數據 
        var data = [{ "name": "1221", "url": "www.hao123.com" },
            { "name": "32132", "url": "c.baidu.com" }
        ];
        collection.insert(data, function(err, result) {
            if (err) {
                console.log('Error:' + err);
                return;
            }
            callback(result);
        });
    }
    MongoClient.connect(DB_CONN_STR, function(err, db) {
        console.log("鏈接成功!");
        insertData(db, function(result) {
            console.log(result);
            db.close();
        });
    });
    </script>
</body>

</html>
相關文章
相關標籤/搜索