1. 程式人生 > 實用技巧 >sql多種注入型別介紹

sql多種注入型別介紹

Node.js

Node.js不是JS檔案,也不是一個JS框架,而是Server side JavaScript runtime,伺服器的一個JS執行時

Node.js是一個基於Chrome v8 引擎的JavaScript執行環境

Node.js使用了一個事件驅動、非阻塞式的I/O模型,使其輕量又高效。

Node.js的包管理器nmp,是全球最大的開源庫生態系統

NVM

Nodejs下載安裝[不建議]

NPM

NPM映象

cnpm

啟用互動直譯器

nrm

Nodesjs由哪幾部分組成

事件迴圈

事件驅動程式

EventEmitter

NVM

Nodejs的版本管理工具(Node Version Manager),由於Nodejs迭代速度特別快,不同的專案可能需要不同的版本,NVP就類似Python中Anaconda?可以管理不同的Python版本?

nvm可以很方便管理node的版本

npm可以很方便的管理node所需包

windows:https://github.com/coreybutler/nvm-windows/releases下載zip檔案即可

linux:https://github.com/creationix/nvm

簡單使用:https://www.jianshu.com/p/8671e439a811

配置淘寶映象:

由於nvm下載node時太慢,我們在其中新增淘寶映象

windows在nvm安裝包下的settings檔案下配置如下:

root: D:\nvm_setup\nvm
path: D:\nvm_setup\nodejs
arch:
64 proxy:none node_mirror: https://npm.taobao.org/mirrors/node/ npm_mirror: https://npm.taobao.org/mirrors/npm/

linux配置nvm下載node環境的映象

- 在使用者環境變數下加入,啟用
    export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
- 配置node環境的npm映象
    - 列印預設的 registry 地址
        npm config -g get registry
        # https:
//registry.npmjs.org/ - 設定淘寶映象 npm config -g set registry https://registry.npm.taobao.org

下載node:

nvm install v7.9.0  #命令後加版本號就可以進行安裝,字母v可以不寫,如下圖

解除安裝:

nvm uninstall v7.9.0

檢視當前正在使用的node版本:

首先啟動nvm,不啟動nvm在控制檯輸入node會報node不是內部或外部命令。

nvm on # 輸入後會列印nvm已啟動,並且顯示當前正在使用的版本

關閉nvm:

nvm off # 關閉nvm後,系統就會遮蔽對node的使用

切換node版本:

nvm use v7.8.0

Nodejs下載安裝[不建議]

建議使用nvm去安裝(nvm install node版本號)!

傻瓜式安裝-安裝後命令行輸入:path,可以檢視到安裝過程中已經將nodejs路徑加入了path中

NPM

由於node是親核心的,本事沒有這麼多功能,但是有很多包,但是包和包直接存在依賴,我們需要一個工具幫我們管理包。這就需要使用NPM了。

類似java的maven,是隨同Nodejs一起安裝的包管理工具,能解決Nodejs程式碼部署上的很多問題。

使用場景

允許使用者從NPM伺服器下載別人編寫的第三方包到本地使用。

允許使用者從NPM伺服器下載並安裝別人編寫的命令列程式到本地使用。

允許使用者將自己編寫的包或命令列程式上傳到NPM伺服器供別人使用。

注意:新版的nodejs已經集成了npm,輸入npm -v即可檢視是否安裝成功。

配置

window下修改npm安裝包的全域性路徑(類似於maven的setting檔案中安裝包的全域性路徑),新建.npmrc檔案,內容如下:

cache=E:\nvm-setup\npm\cache
prefix=E:\nvm-setup\npm\repository

cache表示快取目錄,prefix表示npm包安裝目錄。然後將該檔案丟到user/admin目錄下。然後判斷是否設定成功:命令列:

npm config list

如果打印出自己所配置的內容,就代表設定成功。以後在使用npm install -g <package modul>安裝全域性包時就會安裝在這個配置的目錄下(-g:global)。

然後將prefix對應的目錄設定到環境變數中。

常用命令

windows下安裝/升級npm:

npm install npm -g

linux下升級/安裝

sudo npm install npm -g

使用npm安裝模組:

npm install <Module Name>
// @版本號  下載對應版本號的模組
// --save 儲存到package檔案。  如果有了package檔案,打包專案可以直接刪除node_modules模組,當別人使用時,可以直接在專案中使用nmp install命令自動讀取package.json,生成新的node_modules模組。其實就是在package.json裡添加了這個模組的依賴。
// --save-dev 表示在開發環境下使用

何為開發依賴?何為專案依賴?

npm提供了一些工具包:gulp,我們自己做的東西跟他沒關係,但是開發時候需要用到,gulp就屬於開發階段的依賴。boostrap,我們做的頁面用到了這個包,bootstrap就是任何環節都依賴,這是專案依賴。當生成package檔案的時候,將專案打包給別人的時候(沒有node_modules),別人會通過npm install初始化package中所需要的包,這時候不會去安裝開發依賴所需要的包】

例如:使用npm 安裝常用的Nodejs web框架模組express

npm install express

安裝好之後,express 包就放在了工程目錄下的 node_modules 目錄中,因此在程式碼中只需要通過require('express')的方式就好,無需指定第三方包路徑。

其類似於maven ,也會將依賴的包一起新增進來。

全域性安裝與本地安裝

類似java maven的全域性庫與本地庫吧。

    npm install express          # 本地安裝
    npm install express -g   # 全域性安裝

如果出現錯誤:

npm err! Error: connect ECONNREFUSED 127.0.0.1:8087 

解決辦法:

$ npm config set proxy null

本地安裝

將安裝包放在 ./node_modules 下(執行 npm 命令時所在的目錄),如果沒有 node_modules 目錄,會在當前執行 npm 命令的目錄下生成 node_modules 目錄。

可以通過 require() 來引入本地安裝的包。

全域性安裝

將安裝包放在 /usr/local 下或者你 node 的安裝目錄。

可以直接在命令列裡使用。

如果你希望具備兩者功能,則需要在兩個地方安裝它或使用npm link。

檢視安裝資訊:

npm list -g

檢視某個模組的版本號:npm list 模組名

使用package.json

package.json 位於模組的目錄下,用於定義包的屬性。

例如上面安裝的express模組:【node_modules/express目錄下】

解除安裝模組、更新模組、搜尋模組

npm uninstall <Module Name>
npm update <Module Name>
npm search <Module Name>

建立模組

建立模組,package.json 檔案是必不可少的。我們可以使用 NPM 生成 package.json 檔案,生成的檔案包含了基本的結果。

專案根目錄下執行

npm init

然後根據提示輸入你要建立模組的資訊,最後yes,生成的package.json就在專案的根目錄下。(使用npm init --yes可生成預設的package.json檔案)

註冊npm資源庫【username:liuwei04 password:常用密碼之一 郵箱:qq郵箱】

npm adduser

釋出自己的模組

npm publish

如果你以上的步驟都操作正確,你就可以跟其他模組一樣使用 npm 來安裝。先建立自己的模組,然後釋出到遠端npm庫上,再用時就使用npm install yourpackageName【要先npm login】

NPM映象

cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

啟用互動直譯器

npm

類似windows/linux終端,或者mongoDB的終端【mongo.exe】

nrm

nrm的作用:提供了一些最常用的NPM包映象地址,能夠讓我們快速的切換安裝包時候的伺服器地址;

什麼是映象:原來包剛一開始是隻存在於國外的NPM伺服器,但是由於網路原由,經常訪問不到,這時候,我們可以在國內,建立一個和官網一樣的NPM伺服器,只不過,資料都是從人家那裡拿過來,除此之外,使用方式完全一樣;

1、執行:

npm i nrm -g # 全域性安裝nrm包

2、使用:

nrm ls # 檢視當前所有可用的映象源地址以及當前所使用的映象源地址

3、使用:

nrm use npm 或 nrm use taobao # 切換不同的源地址

nrm只是提供不同的源地址,真正下載安裝還是使用npm命令去裝,只是從nrm指定的映象源裡下載罷了。

Nodesjs由哪幾部分組成

引入 required 模組:我們可以使用require指令來載入 Node.js 模組。【類似於java中的import】

建立伺服器:伺服器可以監聽客戶端的請求,類似於 Apache 、Nginx 等 HTTP 伺服器。

接收請求與響應請求伺服器很容易建立,客戶端可以使用瀏覽器或終端傳送 HTTP 請求,伺服器接收請求後返回響應資料。

案例:

var http = require('http');

http.createServer(function (request,response) {
    // 傳送HTTP頭部
    //HTTP狀態值:200:OK
    //內容型別:text/plain
    response.writeHead(200,{'Content-Type':'text/plain'});

    //傳送相應資料“Hello World”
    response.end("Hello World\n");
}).listen(8888);

//終端列印如下資訊;
console.log('Server running at http://127.0.0.1:8888/')

// 在server.js所在目錄啟動終端:執行node server.js,即可啟動伺服器

Nodejs回撥函式

Node.js 非同步程式設計的直接體現就是回撥。

非同步程式設計依託於回撥來實現,但不能說使用了回撥後程序就非同步化了。

回撥函式在完成任務後就會被呼叫,Node 使用了大量的回撥函式,Node 所有 API 都支援回撥函式。

例如,我們可以一邊讀取檔案,一邊執行其他命令,在檔案讀取完成後,我們將檔案內容作為回撥函式的引數返回。這樣在執行程式碼時就沒有阻塞或等待檔案 I/O 操作。這就大大提高了 Node.js 的效能,可以處理大量的併發請求。

回撥函式一般作為函式的最後一個引數出現:

function foo1(name, age, callback) { }
        function foo2(value, callback1, callback2) { }

事件迴圈

Node.js 是單程序單執行緒應用程式,但是因為 V8 引擎提供的非同步執行回撥介面,通過這些介面可以處理大量的併發,所以效能非常高。

Node.js 幾乎每一個 API 都是支援回撥函式的。

Node.js基本上所有的事件機制都是用設計模式中觀察者模式實現

Node.js 單執行緒類似進入一個while(true)的事件迴圈,直到沒有事件觀察者退出,每個非同步事件都生成一個事件觀察者,如果有事件發生就呼叫該回調函式.

事件驅動程式

Node.js 使用事件驅動模型,當web server接收到請求,就把它關閉然後進行處理,然後去服務下一個web請求。

當這個請求完成,它被放回處理佇列,當到達佇列開頭,這個結果被返回給使用者。

這個模型非常高效可擴充套件性非常強,因為webserver一直接受請求而不等待任何讀寫操作。(這也被稱之為非阻塞式IO或者事件驅動IO)

在事件驅動模型中,會生成一個主迴圈來監聽事件,當檢測到事件時觸發回撥函式。


整個事件驅動的流程就是這麼實現的,非常簡潔。有點類似於觀察者模式,事件相當於一個主題(Subject),而所有註冊到這個事件上的處理函式相當於觀察者(Observer)。

EventEmitter

events 模組只提供了一個物件: events.EventEmitter。EventEmitter 的核心就是事件觸發與事件監聽器功能的封裝。

功能的封裝。