摘要:利用node.js模塊化實現路由功能,將請求路徑做爲參數傳遞給一個route函數,這個函數會根據參數調用一個方法,最後輸出瀏覽器響應內容前端
node.js是一個基於Chrome V8引擎的JaveScript運行環境,簡單來講就是運行在服務端的JavaScript,是一個事件驅動、非阻塞式的I/O模型,速度快,性能好。前端的蓬勃發展除了各大框架的流行以外,還有由於node.js的興起,這使得前臺和後臺的數據交互更加便捷更加輕鬆。由此也產生了一個新的概念——全棧工程師,一個全棧工程師能夠完成前端頁面架構還能夠完美實現後臺數據的交互,熟練掌握node.js已經成爲每位前端工做者基本技能。node
與node.js打包下載的還有一個叫NPM的安裝包管理工具,能解決node.js代碼部署上不少問題。咱們能夠利用npm工具使用第三方包或命令行程序,也能夠上傳本身編寫的包或命令行程序供別人使用。npm安裝第三方包的過程也十分簡便,windows系統用cmd打開命令行,輸入npm install +(包的名稱,例如webpack)就行。webpack
Node.js 的模塊分爲兩類,一類爲原生(核心)模塊,一類爲文件模塊。原生模塊在 Node.js 源代碼編譯的時候編譯進了二進制執行文件,加載的速度最快。另外一類文件模塊是動態加載的,加載速度比原生模塊慢。可是 Node.js 對原生模塊和文件模塊都進行了緩存,因而在第二次 require 時,是不會有重複開銷的。其中原生模塊都被定義在 lib 這個目錄下面,文件模塊則不定性。web
文件模塊能夠是JavaScript代碼文件(.js做爲文件後綴)、也能夠是JSON格式文本文件(.json做爲文件後綴)、還能夠是編輯過的C/C++文件(.node做爲文件後綴)。文件模塊輸入方式經過require('/文件名.後綴'),require('./文件名.後綴'),requrie('../文件名.後綴') ,文件後綴能夠省略;以"/"開頭是以絕對路徑去加載,以"./"開頭和以"../"開頭表示以相對路徑加載,而以"./"開頭表示同級目錄下文件。文件後綴能夠省略,Nodejs嘗試加載的優先級 js文件 > json文件 > node文件,下面給出nodeJS模塊的加載順序:npm
實際應用中咱們常常使用.js文件做爲一個模塊進行輸入輸出,輸出經過exprots或者module.exports,其中exports是一種簡寫形式,等於在文件開頭有這樣一行命令:var exports = module.exports,瀏覽器在編譯的時候也會把它當成module.exports指令,注意咱們在使用exports時不能對它進行賦值等操做,不然會切斷與module.exports之間的聯繫,致使輸出錯誤。json
上面的內容主要介紹了nodeJs的做用、nodeJs的基本語法以及它的遵循規範,下面咱們開始一個demo,實現路由功能:windows
//server.js
var http = require('http') //輸入node.js核心模塊 function startServer(route){ var onRequest = function(req,res) { route(req.url) //傳入請求的路徑 } var server = http.createServer(onRequest) server.listen(3000) //監聽一個端口 } module.exports.startServer = startServer; //輸出模塊
咱們新建一個server.js模塊,在這個模塊中,咱們定義了一個startServer函數,這個函數監聽了一個3000端口,函數執行的時候調用route方法。咱們先將這個模塊輸出瀏覽器
//index.js
var server = require("./server"); //輸入./server模塊 var router = require('./router'); //輸入./router模塊 var handler = require("./handler") //輸入./handler模塊 var handle = {}; handle["/"] = handler.home; handle["/home"] = handler.home; handle["/list"] = handler.list; handle["/add"] = handler.add server.startServer(router.route,handle)
route()接收到了請求路徑,咱們但願它接收到不一樣的路徑會調用不一樣的方法,所以咱們能夠先把要執行的方法做爲屬性值傳給一個handle對象,它的鍵就等於route接收到的請求路徑。因而咱們分別把建立route.js和handler.js,在index.js中把請求路徑和handle對象傳給route函數緩存
//server.js
//route.js function route(pathname,handle,res){ if(typeof handle[pathname] == "function"){ handle[pathname](res) }else{ res.end("404:connot find anything") //未匹配到路徑的時候,響應「404」頁面 } } module.exports.route = route; //handler.js function home (res){ res.end("home") } function list (res){ res.end("list") } function add(res){ res.end("add") } module.exports = { home:home, list: list, add:add }
由於咱們但願在地址欄輸入路徑的時候,頁面會響應出響應的內容,因此咱們要把響應參數res傳遞給route函數,它又會把這個參數傳遞給handler裏的方法,這個咱們就能很靈活地根據請求的地址響應咱們想要的內容。架構
咱們在nodeJS環境中執行index.js模塊,先找到這個模塊的位置,在終端輸入:node index,瀏覽器打開3000端口。這裏推薦一個nodemon插件,它能夠自動同步模塊的變化,不用每次保存後再輸入node index。本次學習的效果以下:
PS:以上就是本次的學習心得,經過博客的方式讓本身的知識點獲得了很好的鞏固,不只要學會,還得知道怎麼分享出來,喜歡互聯網其中一大原因是它的開源精神,學習分享優秀的做品真是一件快樂的事情。本人水平有限,文章不足之處煩請不吝賜教