app.use(path,callback)中的callback既可以是router對象又可以是函數
app.get(path,callback)中的callback只能是函數
例子
app.js
var express = require('express'); var app = express(); var index = require('./routes/index'); //1. app.use('/test1',function(req,res,next){ res.send('hello test1'); }); //2. app.get('/test2',function(req,res,next){ res.send('hello test2'); }); //3. app.use('/test3', index); app.use('/', test1); //4. 頁面顯示錯誤:Cannot GET /test4 app.get('/test4', index); //監聽端口 app.listen(8888, '127.0.0.1', function () { console.log("服務器maintest正在監聽..."); });
index是一個路由對象,結果例1、2、3結果都能正確顯示,而例4卻報404.
index.js:
var express = require('express'); var router = express.Router(); router.get('/', function(req, res, next) { res.send('hello world!'); }); module.exports = router;
兩者關系
這說明,給app.get(app.post、app.put同理)賦個路由對象是不行的,其實,可以將app.get()看作app.use的特定請求(get)的簡要寫法。即
var express = require('express'); var app = express(); app.get('/hello',function(req,res,next){ res.send('hello test2'); });
等同於:
var express = require('express'); var app = express(); var router = express.Router(); router.get('/', function(req, res, next) { res.send('hello world!'); }); app.use('/hello',router);
什么時用app.use,什么時用app.get呢?
路由規則是app.use(path,router)定義的,router代表一個由express.Router()創建的對象,在路由對象中可定義多個路由規則。可是如果我們的路由只有一條規則時,可直接接一個回調作為簡寫,也可以直接使用app.get或app.post方法。即
當一個路徑有多個匹配規則時即一個路由有多個子路由時用app.use(path,router),使用app.use,否則使用相應的app.method(get、post)
app.get("/home",callback) app.get("/home/one",callback) app.get("/home/second",callback) app.get("/home/three",callback)
我們可以創建一個router.js專門用來一個路由匹配多個子路由
var express = require('express') var router = express.Router() router.get("/",(req,res)=>{ res.send("/") }) router.get("/one",(req,res)=>{ res.send("one") }) router.get("/second",(req,res)=>{ res.send("second") }) router.get("/treen",(req,res)=>{ res.send("treen") }) module.exports = router;
在app.js中導入router.js
var express = require('express') var router = require("./router") var app = express() app.use('/home',router) //router路由對象中的路由都會匹配到"/home"路由后面 app.get('/about', function (req, res) { console.log(req.query) res.send('你好,我是 Express!') }) // 4 .啟動服務 app.listen(3000, function () { console.log('app is running at port 3000.') })
app.use的作用是將一個中間件綁定到應用中,參數path是一個路徑前綴,用於限定中間件的作用范圍,所有以該前綴開始的請求路徑均是中間件的作用范圍,不考慮http的請求方法,例如:
如果path設置為‘/’,則
- GET /
- PUT /foo
- POST /foo/bar
均是中間件的作用范圍
app.use(express.static('public'));
為了提供對靜態資源文件(圖片,css,js文件)的服務,請使用Express內置的中間函數express.static.
傳遞一個包含靜態資源的目錄給express.static中間件用於立即開始提供文件。 比如用以下代碼來提供public目錄下的圖片、css文件和js文件:
app.use(express.static('public'));
如果前台想請求后台public目錄下images/08.jpg靜態的圖片資源
通過: http://localhost:3000/images/08.jpg
通過多次使用 express.static中間件來添加多個靜態資源目錄:
app.use(express.static('public')); app.use(express.static('file'));
Express將會按照你設置靜態資源目錄的順序來查看靜態資源文件。
參考:https://www.jianshu.com/p/1d92463ebb69