Ⅰ nodejs和vuejs的區別
完全兩碼事,一個是前端框架,一個是服務端語言。
Node.js 是一個基於 Chrome V8 引擎的 javaScript 執行環境。
Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。
Node.js 的包管理器 npm,是全球最大的開源庫生態系統。
Vue.js是一個構建資料驅動的 web 介面的漸進式框架。Vue.js 的目標是通過盡可能簡單的 API 實現響應的資料系結和組合的檢視元件。穗如它不僅易於上手,還便於與第三方庫或既有專案整合。
另一方面,當與單檔案元件和 Vue 生態系統支援的庫結合使用時,Vue 也完全能夠為復雜的單頁應用程式提供驅動。
去除了一些糟粕,例如: vm.$dispatch, vm.$broadcase
簡化了一些用法, 例如:v-el: 變為 ref=
更多變化可以到 github 的 vuejs 程式碼倉庫檢視第一手資料~
私認為Yeoman的Generators是天生的提供腳手架的工具,如果用webstorm新建Yeoman專案,就可以找到一些有關react的腳手架
node.js和javascript區別還是挺大的,1個平台,1個是程式語言;
javascript是客戶端程式語言,需要瀏覽器的javascript直譯器進行解釋執行;
node.js是一個基於Chrome JavaScript執行時建立的平台,它是對Google V8引擎進行了封裝的執行環境;
簡單的說node.js就是把瀏覽器的直譯器封裝起來作為伺服器執行平台,用類似javascript的結構語法進行程式設計,在node.js上執行。
apache 是多執行緒機制,他為每一個訪問使用者建立單獨的執行緒,彼此互不影響,但是執行緒佔用記憶體,訪問量大記憶體會吃不消,
nodejs 和Apache 的一個很大不同在於「單執行緒機制」,不同的使用者使用同一個執行緒,採用非阻塞I/O和事件驅動 有效提高了伺服器的並發數上限(同時線上人數)。
max_allowed_packet = 64M
[mysql]
disable-auto-rehash #允許通過TAB鍵提示
default-character-set = utf8
connect-timeout = 3
Node.js v5 is an intermediate feature release line that is best suited for users who have an easier time upgrading their Node.js installations, such as developers using the technology for front-end toolchains. This version will be supported for a maximum of only eight months and will be continually updated with new features and better performance; it is not supported under our LTS plan.
The release cadence for v5.x will be more rapid than in the past. Expect a new release once every one to o weeks for v5.x. If upgrading is a challenge for you, we suggest you do not use this release. There will be significant ongoing development. The focus is on getting the releases to users as soon as possible.
npm has been upgraded to v3 in Node.js v5.0.0, which (amongst other changes) will install dependencies as flat as possible in node_moles. v5.0.0 also es with V8 4.6, which ships the new.target and spread operator JavaScript language features. If you want to learn more about other technical details around this, please check out our release post.
It』s another -quality release from us, and we are averaging roughly 50 unique contributors per month to the codebase. We are extremely excited with all the enthusia *** and amazing work that is going into this Node.js v5 and future releases.
mouble(app)
mouble.exports
你可以用它建立你的模組。例如:(假設這是rocker.js檔案)
復製程式碼
程式碼如下:
exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
在另一個檔案中你這樣引用
復製程式碼
程式碼如下:
var rocker = require('./rocker.js');
rocker.name(); 'My name is Lemmy Kilmister'
那到底Mole.exports是什麼呢?它是否合法呢?
其實,Mole.exports才是真正的介面,exports只不過是它的一個輔助工具。最終返回給呼叫的是Mole.exports而不是exports。
所有的exports收集到的屬性和方法,都賦值給了Mole.exports。當然,這有個前提,就是Mole.exports本身不具備任何屬性和方法。如果,Mole.exports已經具備一些屬性和方法,那麼exports收集來的資訊將被忽略。
修改rocker.js如下:
復製程式碼
程式碼如下:
mole.exports = 'ROCK IT!'
exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
再次引用執行rocker.js
復製程式碼
程式碼如下:
var rocker = require('./rocker.js');
rocker.name(); TypeError: Object ROCK IT! has no method 'name'
發現報錯:物件「ROCK IT!」沒有name方法
rocker模組忽略了exports收集的name方法,返回了一個字串「ROCK
IT!」。由此可知,你的模組並不一定非得返回「例項化物件」。你的模組可以是任何合法的javascript物件--boolean, number, date,
JSON, string, function,
array等等。
你的模組可以是任何你設定給它的東西。如果你沒有顯式的給Mole.exports設定任何屬性和方法,那麼你的模組就是exports設定給Mole.exports的屬性。
下面例子中,你的模組是一個類:
復製程式碼
程式碼如下:
mole.exports = function(name, age) {
this.name = name;
this.age = age;
this.about = function() {
console.log(this.name +' is '+ this.age +' years old');
};
};
可以這樣應用它:
復製程式碼
程式碼如下:
var Rocker = require('./rocker.js');
var r = new Rocker('Ozzy', 62);
r.about(); Ozzy is 62 years old
下面例子中,你的模組是一個數組:
復製程式碼
程式碼如下:
mole.exports = ['Lemmy Kilmister', 'Ozzy
O *** ourne', 'Ronnie James Dio', 'Steven Tyler', 'Mick Jagger'];
可以這樣應用它:
復製程式碼
程式碼如下:
var rocker = require('./rocker.js');
console.log('Rockin in heaven: ' + rocker[2]); Rockin in heaven: Ronnie
James Dio
現在你明白了,如果你想你的模組是一個特定的型別就用Mole.exports。如果你想的模組是一個典型的「例項化物件」就用exports。
給Mole.exports新增屬性類似於給exports新增屬性。例如:
復製程式碼
程式碼如下:
mole.exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
同樣,exports是這樣的
復製程式碼
程式碼如下:
exports.name = function() {
console.log('My name is Lemmy Kilmister');
};
Ⅱ 鑒權必須了解的 5 個兄弟:cookie、session、token、jwt、單點登錄
本文你將看到:
**「前端存儲」**這就涉及到一發、一存、一帶,發好辦,登陸介面直接返回給前端,存儲就需要前端想辦法了。
前端的存儲方式有很多。
有,cookie。cookie 也是前端存儲的一種,但相比於 localStorage 等其他方式,藉助 HTTP 頭、瀏覽器能力,cookie 可以做到前端無感知。一般過程是這樣的:
「配置:Domain / Path」
cookie 是要限制::「空間范圍」::的,通過 Domain(域)/ Path(路徑)兩級。
「配置:Expires / Max-Age」
cookie 還可以限制::「時間范圍」::,通過 Expires、Max-Age 中的一種。
「配置:Secure / HttpOnly」
cookie 可以限制::「使用方式」::。
**「HTTP 頭對 cookie 的讀寫」**回過頭來,HTTP 是如何寫入和傳遞 cookie 及其配置的呢?HTTP 返回的一個 Set-Cookie 頭用於向瀏覽器寫入「一條(且只能是一條)」cookie,格式為 cookie 鍵值 + 配置鍵值。例如:
那我想一次多 set 幾個 cookie 怎麼辦?多給幾個 Set-Cookie 頭(一次 HTTP 請求中允許重復)
HTTP 請求的 Cookie 頭用於瀏覽器把符合當前「空間、時間、使用方式」配置的所有 cookie 一並發給服務端。因為由瀏覽器做了篩選判斷,就不需要歸還配置內容了,只要發送鍵值就可以。
**「前端對 cookie 的讀寫」**前端可以自己創建 cookie,如果服務端創建的 cookie 沒加HttpOnly,那恭喜你也可以修改他給的 cookie。調用document.cookie可以創建、修改 cookie,和 HTTP 一樣,一次document.cookie能且只能操作一個 cookie。
調用document.cookie也可以讀到 cookie,也和 HTTP 一樣,能讀到所有的非HttpOnly cookie。
現在回想下,你刷卡的時候發生了什麼?
這種操作,在前後端鑒權系統中,叫 session。典型的 session 登陸/驗證流程:
**「Session 的存儲方式」**顯然,服務端只是給 cookie 一個 sessionId,而 session 的具體內容(可能包含用戶信息、session 狀態等),要自己存一下。存儲的方式有幾種:
「Session 的過期和銷毀」**很簡單,只要把存儲的 session 數據銷毀就可以。****「Session 的分布式問題」**通常服務端是集群,而用戶請求過來會走一次負載均衡,不一定打到哪台機器上。那一旦用戶後續介面請求到的機器和他登錄請求的機器不一致,或者登錄請求的機器宕機了,session 不就失效了嗎?這個問題現在有幾種解決方式。
但通常還是採用第一種方式,因為第二種相當於閹割了負載均衡,且仍沒有解決「用戶請求的機器宕機」的問題。**「node.js 下的 session 處理」**前面的圖很清楚了,服務端要實現對 cookie 和 session 的存取,實現起來要做的事還是很多的。在npm中,已經有封裝好的中間件,比如 express-session - npm,用法就不貼了。這是它種的 cookie:
express-session - npm 主要實現了:
session 的維護給服務端造成很大困擾,我們必須找地方存放它,又要考慮分布式的問題,甚至要單獨為了它啟用一套 Redis 集群。有沒有更好的辦法?
回過頭來想想,一個登錄場景,也不必往 session 存太多東西,那為什麼不直接打包到 cookie 中呢?這樣服務端不用存了,每次只要核驗 cookie 帶的「證件」有效性就可以了,也可以攜帶一些輕量的信息。這種方式通常被叫做 token。
token 的流程是這樣的:
**「客戶端 token 的存儲方式」 在前面 cookie 說過,cookie 並不是客戶端存儲憑證的唯一方式。token 因為它的「無狀態性」,有效期、使用限制都包在 token 內容里,對 cookie 的管理能力依賴較小,客戶端存起來就顯得更自由。但 web 應用的主流方式仍是放在 cookie 里,畢竟少操心。 「token 的過期」**那我們如何控制 token 的有效期呢?很簡單,把「過期時間」和數據一起塞進去,驗證時判斷就好。
編碼的方式豐儉由人。**「base64」**比如 node 端的 cookie-session - npm 庫
默認配置下,當我給他一個 userid,他會存成這樣:
這里的 eyJ1c2VyaWQiOiJhIn0=,就是 {"userid":"abb」} 的 base64 而已。 「防篡改」
是的。所以看情況,如果 token 涉及到敏感許可權,就要想辦法避免 token 被篡改。解決方案就是給 token 加簽名,來識別 token 是否被篡改過。例如在 cookie-session - npm 庫中,增加兩項配置:
這樣會多種一個 .sig cookie,裡面的值就是 {"userid":"abb」} 和 iAmSecret通過加密演算法計算出來的,常見的比如HMACSHA256 類 (System.Security.Cryptography) | Microsoft Docs。
好了,現在 cdd 雖然能偽造出eyJ1c2VyaWQiOiJhIn0=,但偽造不出 sig 的內容,因為他不知道 secret。**「JWT」**但上面的做法額外增加了 cookie 數量,數據本身也沒有規范的格式,所以 JSON Web Token Introction - jwt.io 橫空出世了。
它是一種成熟的 token 字元串生成方案,包含了我們前面提到的數據、簽名。不如直接看一下一個 JWT token 長什麼樣:
這串東西是怎麼生成的呢?看圖:
類型、加密演算法的選項,以及 JWT 標准數據欄位,可以參考 RFC 7519 - JSON Web Token (JWT)node 上同樣有相關的庫實現:express-jwt - npm koa-jwt - npm
token,作為許可權守護者,最重要的就是「安全」。業務介面用來鑒權的 token,我們稱之為 access token。越是許可權敏感的業務,我們越希望 access token 有效期足夠短,以避免被盜用。但過短的有效期會造成 access token 經常過期,過期後怎麼辦呢?一種辦法是,讓用戶重新登錄獲取新 token,顯然不夠友好,要知道有的 access token 過期時間可能只有幾分鍾。另外一種辦法是,再來一個 token,一個專門生成 access token 的 token,我們稱為 refresh token。
有了 refresh token 後,幾種情況的請求流程變成這樣:
如果 refresh token 也過期了,就只能重新登錄了。
session 和 token 都是邊界很模糊的概念,就像前面說的,refresh token 也可能以 session 的形式組織維護。狹義上,我們通常認為 session 是「種在 cookie 上、數據存在服務端」的認證方案,token 是「客戶端存哪都行、數據存在 token 里」的認證方案。對 session 和 token 的對比本質上是「客戶端存 cookie / 存別地兒」、「服務端存數據 / 不存數據」的對比。**「客戶端存 cookie / 存別地兒」**存 cookie 固然方便不操心,但問題也很明顯:
存別的地方,可以解決沒有 cookie 的場景;通過參數等方式手動帶,可以避免 CSRF 攻擊。 「服務端存數據 / 不存數據」
前面我們已經知道了,在同域下的客戶端/服務端認證系統中,通過客戶端攜帶憑證,維持一段時間內的登錄狀態。但當我們業務線越來越多,就會有更多業務系統分散到不同域名下,就需要「一次登錄,全線通用」的能力,叫做「單點登錄」。
簡單的,如果業務系統都在同一主域名下,比如wenku..com tieba..com,就好辦了。可以直接把 cookie domain 設置為主域名 .com,網路也就是這么乾的。
比如滴滴這么潮的公司,同時擁有didichuxing.com xiaojukeji.com didiglobal.com等域名,種 cookie 是完全繞不開的。這要能實現「一次登錄,全線通用」,才是真正的單點登錄。這種場景下,我們需要獨立的認證服務,通常被稱為 SSO。 「一次「從 A 系統引發登錄,到 B 系統不用登錄」的完整流程」
**「完整版本:考慮瀏覽器的場景」**上面的過程看起來沒問題,實際上很多 APP 等端上這樣就夠了。但在瀏覽器下不見得好用。看這里:
對瀏覽器來說,SSO 域下返回的數據要怎麼存,才能在訪問 A 的時候帶上?瀏覽器對跨域有嚴格限制,cookie、localStorage 等方式都是有域限制的。這就需要也只能由 A 提供 A 域下存儲憑證的能力。一般我們是這么做的:
圖中我們通過顏色把瀏覽器當前所處的域名標記出來。注意圖中灰底文字說明部分的變化。
謝謝大家哦
Ⅲ 配置nodeJs系統環境變數
簡櫻 nodeJs系統環境變數配置非常簡單,帶缺請依次打開windows電腦的計算蠢咐辯機-系統屬性中的高級系統設置,點擊環境變數按鈕,為用戶變數添加名為 NODE_PATH 的環境變數,點擊新建按鈕,依次輸入環境變數名:NODE_PATH 和輸入值即nodejs的本地安裝目錄,配置完之後點擊確定。重新打開dos界面,輸入:node -v驗證nodeJs環境變數是否配置成功。
Ⅳ 如何在linux中安裝nodejs
在linux中安裝nodejs方法如下:
1、去官網下載和自己系統匹配的文件:
通過 uname -a 命令查看到我的Linux系統位數是64位(備註:x86_64表示64位系統, i686 i386表示32位系統),如圖
Ⅳ Node.js下載安裝與環境變數配置
網址: Download | Node.js (nodejs.org)
1、至此Node.js已經安裝完成,可以先進行下簡單的測試安裝是否成功了,後面還要進行環境配;
2、在鍵盤按下【win+R】鍵,輸入cmd,然後回車,打開cmd窗口;
3、安裝完後的目錄如下圖所示;
4、此處說明下:新版的Node.js已自帶npm,安裝Node.js時會一起安裝,npm的作用就是對Node.js依賴的包進行管理,也可以理解為用來安裝/卸載Node.js需要裝的東西。
5、輸入 node -v 顯示node.js的版本,說明node安裝成功;輸入 npm -v 顯示npm`顯示npm的版本,說明npm安裝成功。
1、說明:這里的環境配置主要配置的是npm安裝的全局模塊所在的路徑,以及緩存cache的路徑,之所以要配置,是因為以後在執行類似:npm install express [-g] (後面的可選參數-g,g代表global全局安裝的意思)的安裝語句時,會將安裝的模塊安裝到【C:\Users\用戶名\AppData\Roaming\npm】路徑中,佔C盤空間
2、例如:我希望將全模塊所在路徑和緩存路徑放在我node.js安裝的文件夾中,則在我安裝的文件夾【D:\Develop\nodejs】下創建兩個文件夾【node_global】及【node_cache】。
3、執行命令
npm config set prefix "D:\Develop\nodejs\node_global"
npm config set cache "D:\Develop\nodejs\node_cache"
1、接下來設置環境變數,關閉cmd窗口,「我的電腦」-右鍵-「屬性」-「高級系統設置」-「高級」-「環境變數」;
2、進入環境變數對話框,在【系統變數】下新建【NODE_PATH】,輸入【D:\Develop\nodejs\node_global\node_moles】,將【用戶變數】下的【Path】修改為【D:\Develop\nodejs\node_global】。
1、配置完後,安裝個mole測試下,我們就安裝最常用的express模塊,打開cmd窗口
2、輸入如下命令進行模塊的全局安裝:
npm install express -g # -g是全局安裝的意思
Ⅵ 什麼是node.js
1、起源
Node.js起源於2009年3月。最初Ryan Dahl是為了構建一個高性能的文本伺服器,而node.js是他在尋找一種更高提升web伺服器性能發現的,事件驅動、非阻塞I/O這種方式能更好的提高性能。隨著Nodejs的不斷發展,Nodejs漸漸演變成一種構建網路應用的基礎框架,並發展為一個不共享任何資源的單線程、單進程系統,但包含了很適合網路的庫,這樣Nodejs就為構建大型分布式應用提供了基礎設施。他們的目標都是為了構建快速、可伸縮的網路應用平台。它自身非常簡單、採用通信協議來組織許多的Node,非常容易通過拓展來達成構建大型網路應用的目的。
2、node.js簡介
Node.js是一個可以快速構建網路服務及應用的平台。該平台的構建是基於Chrome'sJavaScriptruntime,也就是說,實際上它是對GoogleV8引擎(應用於GoogleChrome瀏覽器)進行了封裝。Nodejs不是一個js應用而是一個js運行平台。其是由C++編寫而成。但是Nodejs是一個後端的運行環境。因此你可以編寫系統級或者伺服器端的js讓Nodejs幫你執行。
3、優勢
1)node.js採用事件驅動、非同步編程,為網路服務而設計。
2)node.js採用非阻塞模式的IO處理,可以使node.js在相對低系統資源耗,擁有出色的負載能力,非常適合用作依賴其它IO資源的中間層服務。
3)node.js輕量高效,可以認為是數據密集型分布式部署環境下的實時應用系統的完美解決方案。
4)使用node.js配合CoffeeScript 寫非同步操作鏈非常便利,相比之下Tornado無論是寫命名函數的回調,還是 yield 一個 Task 都沒那麼自然。
Ⅶ windows怎麼安裝nodejs
這里不想談太多的nodejs的相關信息。只說一下,windows系統下簡單nodejs環境配置。
第一步:下載安裝文件
下載地址:官網http://www.nodejs.org/download/
打開地址http://127.0.0.1:8888/
發現輸出 :
Hello World