app.use()
มีไว้สำหรับการเชื่อมโยงมิดเดิลแวร์กับแอปพลิเคชันของคุณ นี่path
เป็นพา ธ" เมานต์ " หรือ " คำนำหน้า " และ จำกัด มิดเดิลแวร์ให้ใช้ได้เฉพาะกับพา ธ ใด ๆ ที่ร้องขอที่ขึ้นต้นด้วย มันสามารถใช้เพื่อฝังแอปพลิเคชันอื่น:
// subapp.js
var express = require('express');
var app = modules.exports = express();
// ...
// server.js
var express = require('express');
var app = express();
app.use('/subapp', require('./subapp'));
// ...
ด้วยการระบุ/
ว่าเป็นเส้นทาง " mount " app.use()
จะตอบกลับไปยังเส้นทางใด ๆ ที่ขึ้นต้นด้วย/
ซึ่งทั้งหมดนั้นและไม่คำนึงถึงคำกริยา HTTP ที่ใช้:
GET /
PUT /foo
POST /foo/bar
- เป็นต้น
app.get()
ในทางกลับกันเป็นส่วนหนึ่งของการกำหนดเส้นทางแอปพลิเคชันของ Express และมีไว้สำหรับการจับคู่และการจัดการเส้นทางเฉพาะเมื่อมีการร้องขอด้วยGET
กริยา HTTP:
และการกำหนดเส้นทางที่เทียบเท่าสำหรับตัวอย่างของคุณapp.use()
คือ:
app.all(/^\/.*/, function (req, res) {
res.send('Hello');
});
( อัปเดต: การพยายามแสดงความแตกต่างให้ดีขึ้น )
วิธีการกำหนดเส้นทางรวมถึงapp.get()
วิธีการอำนวยความสะดวกที่ช่วยให้คุณจัดแนวการตอบสนองต่อคำขอได้แม่นยำยิ่งขึ้น พวกเขายังเพิ่มการสนับสนุนสำหรับคุณสมบัติเช่นพารามิเตอร์next('route')
และ
ภายในแต่ละตัวapp.get()
มีการเรียกเพื่อapp.use()
ให้คุณสามารถทำสิ่งนี้app.use()
ได้โดยตรง แต่การทำเช่นนี้มักจะต้องการ (อาจไม่จำเป็น) นำรหัสจำนวนสำเร็จรูปไปใช้ซ้ำจำนวนมาก
ตัวอย่าง:
สำหรับเส้นทางที่เรียบง่ายและคงที่:
app.get('/', function (req, res) {
// ...
});
เมื่อเทียบกับ
app.use('/', function (req, res, next) {
if (req.method !== 'GET' || req.url !== '/')
return next();
// ...
});
ด้วยตัวจัดการหลายตัวสำหรับเส้นทางเดียวกัน:
app.get('/', authorize('ADMIN'), function (req, res) {
// ...
});
เมื่อเทียบกับ
const authorizeAdmin = authorize('ADMIN');
app.use('/', function (req, res, next) {
if (req.method !== 'GET' || req.url !== '/')
return next();
authorizeAdmin(req, res, function (err) {
if (err) return next(err);
// ...
});
});
ด้วยพารามิเตอร์:
app.get('/item/:id', function (req, res) {
let id = req.params.id;
// ...
});
เมื่อเทียบกับ
const pathToRegExp = require('path-to-regexp');
function prepareParams(matches, pathKeys, previousParams) {
var params = previousParams || {};
// TODO: support repeating keys...
matches.slice(1).forEach(function (segment, index) {
let { name } = pathKeys[index];
params[name] = segment;
});
return params;
}
const itemIdKeys = [];
const itemIdPattern = pathToRegExp('/item/:id', itemIdKeys);
app.use('/', function (req, res, next) {
if (req.method !== 'GET') return next();
var urlMatch = itemIdPattern.exec(req.url);
if (!urlMatch) return next();
if (itemIdKeys && itemIdKeys.length)
req.params = prepareParams(urlMatch, itemIdKeys, req.params);
let id = req.params.id;
// ...
});
หมายเหตุ: การดำเนินการด่วนของคุณสมบัติเหล่านี้มีอยู่ในตนRouter
,Layer
Route
และ