亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Express 搭建服務(wù)器

CrazyCodes / 2857人閱讀

摘要:指定需要處理的路由回調(diào)函數(shù),即請求此路由的處理函數(shù),它可以接收兩個(gè)參數(shù)三個(gè)參數(shù),四個(gè)參數(shù)。如果匹配到自定義的路由,立即執(zhí)行回調(diào)函數(shù),如果處理函數(shù)中沒有則不再往下執(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密集型應(yīng)用

適合前端開發(fā)者快速搭建服務(wù)器,一般用于前后端分離

安裝Nodejs

windows

打開node官網(wǎng)(https://nodejs.org)

直接點(diǎn)擊 LTS 版本,下載安裝包,Current版本是開發(fā)版,不要下載,如圖

下載完成之后,直接安裝即可

ubuntu

運(yùn)行以下命令

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

mac

與windows類似,下載安裝包即可

安裝完成后,運(yùn)行如下命令檢查是否安裝成功,(以上方法安裝node都會帶上對應(yīng)的npm,所以也需要檢查一下npm是否安裝成功。)

node -v // 檢查node版本
npm -v  // 檢查npm版本
搭建服務(wù)器

安裝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版本

生成項(xiàng)目文件

mkdir app
cd app
/**
 * 生成項(xiàng)目文件
 * express 默認(rèn)使用ajs模板,加上 -e 指定更友好的ejs模板
 */
express -e
npm intall    // 安裝依賴
npm start     // 啟動項(xiàng)目

然后瀏覽器訪問localhost:3000,最簡單的服務(wù)器就ok了。

Express 進(jìn)階

如何修改程序啟動的默認(rèn)3000端口
Express 的啟動目錄是/bin/www,里面有一行代碼:

var port = normalizePort(process.env.PORT || "3000");

不難看出程序先去取process.env.PORT(環(huán)境變量PORT)的值,沒有就默認(rèn)為3000
所以如果想改變端口,可以直接把3000改成想要的端口號或者修改環(huán)境變量PORT的值,操作如下:
在啟動程序之前,執(zhí)行

// ubuntu IOS
export PORT=4000;
// windows
set PORT=4000;

然后執(zhí)行npm start,端口就被設(shè)置成了4000.

如何修改運(yùn)行環(huán)境
Express默認(rèn)的運(yùn)行環(huán)境是development,運(yùn)行環(huán)境可以通過process.env.NODE_ENV來獲取,將系統(tǒng)環(huán)境設(shè)置為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"});
})

啟動服務(wù)器,訪問localhost:3000/status,得到數(shù)據(jù){status: "ok"};
具體分析一下:
app.get(), get是app對象的一個(gè)方法,負(fù)責(zé)處理get方法,改成post,則只處理post請求,不會處理別的請求,其余像put,delete類似。若寫成use,則會處理此路由任何方法的請求。
/status, 指定需要處理的路由
回調(diào)函數(shù),即請求此路由的處理函數(shù),它可以接收兩個(gè)參數(shù),三個(gè)參數(shù),四個(gè)參數(shù)。一旦參數(shù)為四個(gè)就被express認(rèn)定是錯(cuò)誤處理函數(shù)

// app.js 里這就是個(gè)錯(cuò)誤處理函數(shù),用來處理所有路由上面拋出的錯(cuò)誤,一般寫在最后
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請求的各項(xiàng)數(shù)據(jù)。
res
Express 封裝的http reponse對象,包含send,json,jsonp等方法。
next
如果執(zhí)行next,在執(zhí)行完此處理函數(shù)之后,會繼續(xù)向后找下一個(gè)處理函數(shù),

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,第一個(gè)回調(diào)函數(shù),執(zhí)行到next()時(shí),繼續(xù)找下一個(gè)能處理/test-next的回調(diào).

什么是中間件
中間件(middlewear)是Express中的一個(gè)重要概念,Express使用中間件完成對請求體的改造,或者執(zhí)行一些中間操作。歸根結(jié)底,中間件就是一個(gè)函數(shù),滿足兩個(gè)條件,

req,res,next三個(gè)參數(shù),

最后執(zhí)行next函數(shù),將處理權(quán)移交出去

寫一個(gè)打印請求的中間件:

// 定義中間件,打印請求的方法和url
function logRequest(req, res, next) {
    console.log(req.method, method.url);
    next();
}
// 使用中間件
app.use(logRequest);

Express 如何處理路由
對于一個(gè)請求,Express處理經(jīng)過一下流程

從第一個(gè)use開始處理請求,如果是中間件,處理完成之后,繼續(xù)向下處理

如果遇到指定靜態(tài)文件的中間件,會查詢靜態(tài)文件是否匹配,如果匹配直接返回,不匹配就繼續(xù)向下尋找合適路由。

如果匹配到自定義的路由,立即執(zhí)行回調(diào)函數(shù),如果處理函數(shù)中沒有next()則不再往下執(zhí)行,如果執(zhí)行了next(),會繼續(xù)向下匹配。

如果一個(gè)也沒有匹配到,會進(jìn)入404處理中間件,這個(gè)中間件會拋出一個(gè)錯(cuò)誤,交由錯(cuò)誤處理中間件處理。

理解靜態(tài)資源處理中間件
app.use(express.static(path.join(__dirname, "public")));,express.static(PATH) 會將指定的目錄下的所有資源作為靜態(tài)資源??蛻舳丝梢暂斎胫付ㄙY源的路徑訪問此資源。其實(shí)可以理解為將靜態(tài)資源的路徑,作為路由注冊到了app。
如果要將文件/public/stylesheets/style.css,設(shè)置為靜態(tài)資源,可以指定靜態(tài)文件目錄

app.use(express.static(path.join(__dirname, "public")));

也可以不設(shè)置靜態(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)資源和用戶自定義路由是等價(jià)的,所以,一般將靜態(tài)資源處理中間件放在用戶自定義中間件前面,避免路由沖突。

如何使用模板(默認(rèn)使用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即可看到結(jié)果。
ejs的常用語法如下

<% %> 在標(biāo)簽里可以寫任意的 javascript 代碼,可以把 javascript 代碼拆開或者合在一起寫,也可以與 html 標(biāo)簽一起寫:

<% var a = 1
   var b = 2 
   var c = a+b %>
 // var user = [1,2,3]
 <% for(let i=0; i
    

html

<% } %>

<%= %> 輸出轉(zhuǎn)義后的內(nèi)容

 // ejs
 

<%= "" %>

// 轉(zhuǎn)義后

<%- %> 輸出未轉(zhuǎn)義的內(nèi)容

// ejs

<%- "

// 不轉(zhuǎn)義的輸出

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/107943.html

相關(guān)文章

  • express中間層搭建前端項(xiàng)目1

    摘要:從前端小白到精通首先需要自行下載安裝安裝地址我的版本是,安裝之后,需要安裝依賴以及生成調(diào)試工具,親測對版本比較敏感,只兼容低版本的所以調(diào)試可以用或者用軟件進(jìn)行調(diào)試安裝調(diào)試鏈接,下載包,忘記了模板引擎用的是,喜歡用其實(shí)一樣,只是語法有 從前端小白到精通express 首先需要自行下載安裝nodejs nodejs安裝地址//我的版本是4.7.0, 安裝nodejs之后,需要npm in...

    stefanieliang 評論0 收藏0
  • express中間層搭建前端項(xiàng)目2

    摘要:上面一片文章已經(jīng)介紹怎樣創(chuàng)建服務(wù)端服務(wù),這篇將搭建路由第一章搭建服務(wù)配置引入相關(guān)中間件文件讀取壓縮處理異常設(shè)置模板引擎使用相關(guān)中間件日志請求體解析中間對傳入的進(jìn)行解析后賦值給引入文件里面的靜態(tài)資源包括引入路由文件路由文件讀取抓取錯(cuò)誤信 上面一片文章已經(jīng)介紹怎樣創(chuàng)建nodejs服務(wù)端服務(wù),這篇將express搭建路由第一章搭建nodejs服務(wù) 配置app.js引入相關(guān)中間件 var ex...

    tianhang 評論0 收藏0
  • 【實(shí)戰(zhàn)】用 express+MongoDB 搭建一個(gè)完整的前端項(xiàng)目

    摘要:前言要做一個(gè)全沾的工程師,對于后端和數(shù)據(jù)庫來說,即使不認(rèn)識也要見個(gè)面的?;玖私獾母拍罹秃?,主要是安裝上數(shù)據(jù)庫,并進(jìn)行簡單的增刪操作。 前言:要做一個(gè)全沾的工程師,對于后端和數(shù)據(jù)庫來說,即使不認(rèn)識也要見個(gè)面的。本文給的例子很簡單,也貼出來源碼,只要一步步下來,就可以跑起來啦~~~ 思考一個(gè)需求:做一個(gè)登錄頁面,自己搭建服務(wù)和數(shù)據(jù)庫,將用戶輸入的登錄信息保存到數(shù)據(jù)庫如何完成呢:首先選擇...

    Steve_Wang_ 評論0 收藏0
  • 使用Express搭建一個(gè)簡單的務(wù)器

    摘要:框架應(yīng)用程序是一個(gè)保持最小規(guī)模的靈活的應(yīng)用程序開發(fā)框架,為和移動應(yīng)用程序提供一組強(qiáng)大的功能。路由基本使用下載新建一個(gè)文件,然后輸入然后運(yùn)行打開就出現(xiàn)請求和響應(yīng)應(yīng)用使用回調(diào)函數(shù)的參數(shù)和對象來處理請求和響應(yīng)的數(shù)據(jù)。 Express框架 Web 應(yīng)用程序 Express 是一個(gè)保持最小規(guī)模的靈活的 Node.js Web 應(yīng)用程序開發(fā)框架,為 Web 和移動應(yīng)用程序提供一組強(qiáng)大的功能。 AP...

    gghyoo 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<