中間函式(中介軟體),技術上說就是得到乙個請求物件,要麼反饋客戶端,要麼傳遞給另乙個中間函式。在express中,所有路由控制代碼函式都是中間函式。
use(express.
json()
);當我們呼叫express.json()
方法時,它返回乙個函式物件,它是乙個中間函式。這個函式的作用就是讀取請求,如果請求體是乙個json格式物件,它就會格式化這個json物件,並以此設定req.body
屬性。
express總體來說就是一堆的中間函式。
中介軟體按順序呼叫。
我們可以對**結構進行優化:
將中間函式放入另乙個檔案中
以helmet、morgan的使用為例:
const express =
require
("express");
const helmet =
require
("helmet");
const morgan =
require
("morgan");
express()
;const joi =
require
("joi");
use(
helmet()
);use(
morgan
('tiny'))
;
console.
log(
`node_env is:$`
);console.
log(
get(
'env')}`);
node_env is:undefined
可以利用這個,結合morgan中介軟體,實現只在開發環境中使用日誌:
if
get(
'env')==
'development'
)
可以使用下面語句切換為生產環境:
export
node_env
= production
如何儲存應用的配置,並在不同的環境下復用它?
應用配置管理包——config
安裝後在應用目錄下新建config目錄,然後在config目錄下新建default.json
檔案,development.json檔案,以及production.json檔案,分別用於預設環境、開發環境和生產環境的應用配置:
default.json:
development.json:
}
production.json:
}
當我們在開發環境下,在index.js中這樣呼叫,出現的是development.json中資訊:
console.
log(
+config.
get(
'name'))
;console.
log(
"mail host:"
+config.
get(
'mail.host'))
;
當我們把process.node_env更改為production後,再次呼叫上述語句出現的是production.json裡面的資訊。
}
console.
log(
"mail password:"
+config.
get(
'mail.password'))
;
mail password:
1234
使用debug模組可以避免使用很多的console.log語句,從而避免除錯完成後進行大量的刪除或注釋。我們使用debug語句取代console.log語句:
const startupdebugger =
require
('debug')(
)//用於除錯的專用命名空間
const dbdebugger =
require
('debug')(
)//用於除錯的專用命名空間
ifget
('env')==
'development'
)//db work
dbdebugger
('資料庫已連線......'
有時我們需要返回html給客戶端,而不是json資料,這時就需要使用模板引擎。
以pug為例:
設定圖形引擎:
set(
'view engine'
,'pug');
set(
'view'
,'./views');
//default
views/index.pug
html
head
title= title
body
h1= message
注意:等號右邊一定不能有空 Nodejs學習筆記(四)
今天在寫mysql資料庫操作的時候,發現當我要查詢多條sql語句的時候 前一條的語句在後一條語句執行完的時候還沒有完成,這個導致很多語句的返回值都是undefined var subitems connection.query sql,userid function err,result conso...
NodeJS學習筆記(四)
乙個js檔案就是乙個模組 exports.world function var hello require hello 自動幫你尋找到js字尾的hello檔案 hello.world 輸出hello world function hello this.sayhello function module...
NodeJS學習筆記
superagent 抓取資源 cheerio 化為dom結構 var superagent require superagent superagent.get host url end function err,sres sres.text 裡面儲存著網頁的 html 內容,將它傳給 cheeri...