摘要:指定需要處理的路由回調函數,即請求此路由的處理函數,它可以接收兩個參數三個參數,四個參數。如果匹配到自定義的路由,立即執(zhí)行回調函數,如果處理函數中沒有則不再往下執(zhí)行,如果執(zhí)行了會繼續(xù)向下匹配。
簡介
Node.js? is a JavaScript runtime built on Chrome"s V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js" package ecosystem, npm, is the largest ecosystem of open source libraries in the world.試用場景
適合I/O密集型應用
適合前端開發(fā)者快速搭建服務器,一般用于前后端分離
安裝Nodejs
windows
打開node官網(https://nodejs.org)
直接點擊 LTS 版本,下載安裝包,Current版本是開發(fā)版,不要下載,如圖
下載完成之后,直接安裝即可
ubuntu
運行以下命令
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install -y nodejs
mac
與windows類似,下載安裝包即可
安裝完成后,運行如下命令檢查是否安裝成功,(以上方法安裝node都會帶上對應的npm,所以也需要檢查一下npm是否安裝成功。)
node -v // 檢查node版本 npm -v // 檢查npm版本搭建服務器
安裝express
Express is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications.
npm install express -g // 全局安裝express npm install express-generator -g // 全局安裝express腳手架,安裝之后可以使用express命令 express --version // 檢查express版本
生成項目文件
mkdir app cd app /** * 生成項目文件 * express 默認使用ajs模板,加上 -e 指定更友好的ejs模板 */ express -e npm intall // 安裝依賴 npm start // 啟動項目
然后瀏覽器訪問localhost:3000,最簡單的服務器就ok了。
Express 進階
如何修改程序啟動的默認3000端口
Express 的啟動目錄是
var port = normalizePort(process.env.PORT || "3000");
不難看出程序先去取process.env.PORT(環(huán)境變量PORT)的值,沒有就默認為3000
所以如果想改變端口,可以直接把3000改成想要的端口號或者修改環(huán)境變量PORT的值,操作如下:
在啟動程序之前,執(zhí)行
// ubuntu IOS export PORT=4000; // windows set PORT=4000;
然后執(zhí)行npm start,端口就被設置成了4000.
如何修改運行環(huán)境
Express默認的運行環(huán)境是development,運行環(huán)境可以通過process.env.NODE_ENV來獲取,將系統(tǒng)環(huán)境設置為production,代碼如下:
// ubuntu IOS export NODE_ENV=production // wondows set NODE_ENV=production
如何添加接口
在app.js中,app.use("/", routes);前面新增
app.get("/status", function (req, res) { res.send({status: "ok"}); })
啟動服務器,訪問localhost:3000/status,得到數據{status: "ok"};
具體分析一下:
app.get(), get是app對象的一個方法,負責處理get方法,改成post,則只處理post請求,不會處理別的請求,其余像put,delete類似。若寫成use,則會處理此路由任何方法的請求。
/status, 指定需要處理的路由
回調函數,即請求此路由的處理函數,它可以接收兩個參數,三個參數,四個參數。一旦參數為四個就被express認定是錯誤處理函數
// app.js 里這就是個錯誤處理函數,用來處理所有路由上面拋出的錯誤,一般寫在最后 app.use(function(err, req, res, next) { res.status(err.status || 500); res.render("error", { message: err.message, error: err }); });
req
Express 封裝的http request對象,包含headers,query,params等自帶屬性。用來獲取某次http請求的各項數據。
res
Express 封裝的http reponse對象,包含send,json,jsonp等方法。
next
如果執(zhí)行next,在執(zhí)行完此處理函數之后,會繼續(xù)向后找下一個處理函數,
app.get("/test-next", function(req, res, next) { console.log("first handler fn"); next(); }); app.get("/test-next", function(req, res, next) { res.send({status: "second handler fn"}); });
瀏覽器訪問localhoat:3000/test-next,會得到{status: "second handler fn"},
處理路由/test-next,第一個回調函數,執(zhí)行到next()時,繼續(xù)找下一個能處理/test-next的回調.
什么是中間件
中間件(middlewear)是Express中的一個重要概念,Express使用中間件完成對請求體的改造,或者執(zhí)行一些中間操作。歸根結底,中間件就是一個函數,滿足兩個條件,
有req,res,next三個參數,
最后執(zhí)行next函數,將處理權移交出去
寫一個打印請求的中間件:
// 定義中間件,打印請求的方法和url function logRequest(req, res, next) { console.log(req.method, method.url); next(); } // 使用中間件 app.use(logRequest);
Express 如何處理路由
對于一個請求,Express處理經過一下流程
從第一個use開始處理請求,如果是中間件,處理完成之后,繼續(xù)向下處理
如果遇到指定靜態(tài)文件的中間件,會查詢靜態(tài)文件是否匹配,如果匹配直接返回,不匹配就繼續(xù)向下尋找合適路由。
如果匹配到自定義的路由,立即執(zhí)行回調函數,如果處理函數中沒有next()則不再往下執(zhí)行,如果執(zhí)行了next(),會繼續(xù)向下匹配。
如果一個也沒有匹配到,會進入404處理中間件,這個中間件會拋出一個錯誤,交由錯誤處理中間件處理。
理解靜態(tài)資源處理中間件
app.use(express.static(path.join(__dirname, "public")));,express.static(PATH) 會將指定的目錄下的所有資源作為靜態(tài)資源??蛻舳丝梢暂斎胫付ㄙY源的路徑訪問此資源。其實可以理解為將靜態(tài)資源的路徑,作為路由注冊到了app上。
如果要將文件
app.use(express.static(path.join(__dirname, "public")));
也可以不設置靜態(tài)文件,自定義路由
app.get("/stylesheets/style.css", function (req, res, next) { res.sendFile(path.join(__dirname, "public/stylesheets/style.css")); })
兩種方式訪問http://localhost:3000/stylesheets/style.css都能得到style.css文件。
靜態(tài)資源和用戶自定義路由是等價的,所以,一般將靜態(tài)資源處理中間件放在用戶自定義中間件前面,避免路由沖突。
如何使用模板(默認使用ejs模板引擎)
// path 為.ejs模板的路徑 // data 是給模板傳入的值,必須是對象類型 res.render(, [data]);
例如
app.js
app.get("/ejs", function(req, res, next) { res.render("index", { title: "Express" }); });
index.ejs
<%= title %>
test ejs
訪問localhost:3000/ejs即可看到結果。
ejs的常用語法如下
<% %> 在標簽里可以寫任意的 javascript 代碼,可以把 javascript 代碼拆開或者合在一起寫,也可以與 html 標簽一起寫:
<% var a = 1 var b = 2 var c = a+b %> // var user = [1,2,3] <% for(let i=0; ihtml
<% } %>
<%= %> 輸出轉義后的內容
// ejs<%= "
// 轉義后" %>
<%- %> 輸出未轉義的內容
// ejs // 不轉義的輸出
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/107943.html
摘要:從前端小白到精通首先需要自行下載安裝安裝地址我的版本是,安裝之后,需要安裝依賴以及生成調試工具,親測對版本比較敏感,只兼容低版本的所以調試可以用或者用軟件進行調試安裝調試鏈接,下載包,忘記了模板引擎用的是,喜歡用其實一樣,只是語法有 從前端小白到精通express 首先需要自行下載安裝nodejs nodejs安裝地址//我的版本是4.7.0, 安裝nodejs之后,需要npm in...
摘要:上面一片文章已經介紹怎樣創(chuàng)建服務端服務,這篇將搭建路由第一章搭建服務配置引入相關中間件文件讀取壓縮處理異常設置模板引擎使用相關中間件日志請求體解析中間對傳入的進行解析后賦值給引入文件里面的靜態(tài)資源包括引入路由文件路由文件讀取抓取錯誤信 上面一片文章已經介紹怎樣創(chuàng)建nodejs服務端服務,這篇將express搭建路由第一章搭建nodejs服務 配置app.js引入相關中間件 var ex...
摘要:前言要做一個全沾的工程師,對于后端和數據庫來說,即使不認識也要見個面的。基本了解的概念就好,主要是安裝上數據庫,并進行簡單的增刪操作。 前言:要做一個全沾的工程師,對于后端和數據庫來說,即使不認識也要見個面的。本文給的例子很簡單,也貼出來源碼,只要一步步下來,就可以跑起來啦~~~ 思考一個需求:做一個登錄頁面,自己搭建服務和數據庫,將用戶輸入的登錄信息保存到數據庫如何完成呢:首先選擇...
摘要:框架應用程序是一個保持最小規(guī)模的靈活的應用程序開發(fā)框架,為和移動應用程序提供一組強大的功能。路由基本使用下載新建一個文件,然后輸入然后運行打開就出現請求和響應應用使用回調函數的參數和對象來處理請求和響應的數據。 Express框架 Web 應用程序 Express 是一個保持最小規(guī)模的靈活的 Node.js Web 應用程序開發(fā)框架,為 Web 和移動應用程序提供一組強大的功能。 AP...
閱讀 2984·2023-04-25 19:45
閱讀 2700·2021-11-19 09:40
閱讀 707·2021-10-14 09:49
閱讀 2721·2021-09-30 09:47
閱讀 2251·2021-09-26 09:55
閱讀 1240·2021-09-22 16:01
閱讀 2823·2019-08-30 14:19
閱讀 716·2019-08-29 16:44