app.use與app.get的區別及解析


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)

 

路由/home后面有三個子路由緊緊跟隨,分別是/one,/second,/three
如果使用app.get(),則要不斷地重復,很麻煩,也不利於區分:
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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM