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'));
// ...
/
" 마운트 "경로 로 지정 하면 사용되는 HTTP 동사에 관계없이로 app.use()
시작하는 모든 경로에 응답합니다 /
.
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) {
// ...
});
vs.
app.use('/', function (req, res, next) {
if (req.method !== 'GET' || req.url !== '/')
return next();
// ...
});
동일한 경로에 여러 핸들러가있는 경우 :
app.get('/', authorize('ADMIN'), function (req, res) {
// ...
});
vs.
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;
// ...
});
vs.
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
.