>  기사  >  웹 프론트엔드  >  Express Routing_javascript 스킬에 대한 자세한 설명

Express Routing_javascript 스킬에 대한 자세한 설명

WBOY
WBOY원래의
2016-05-16 15:26:281368검색

라우팅

라우팅은 애플리케이션의 엔드포인트(URI)를 정의하는 방법과 클라이언트 요청에 응답하는 방법을 나타냅니다.

라우팅은 URI, HTTP 요청(GET, POST 등) 및 여러 핸들로 구성됩니다. 구조는 app.METHOD(path, [callback...], callback), app은 express입니다. object 예시에서 METHOD는 HTTP 요청 메서드, path는 서버의 경로, callback은 경로가 일치할 때 실행되는 함수입니다.

기본 라우팅 예는 다음과 같습니다.

var express = require('express');
var app = express();
// respond with "hello world" when a GET request is made to the homepage
app.get('/', function(req, res) {
 res.send('hello world');
});

라우팅 방법

라우팅 방법은 HTTP 요청 방법에서 시작되며 Express 인스턴스와 연결됩니다.

다음 예에서는 애플리케이션 및 경로에 대해 정의된 GET 및 POST 요청을 보여줍니다.

// GET method route
app.get('/', function (req, res) {
 res.send('GET request to the homepage');
});
// POST method route
app.post('/', function (req, res) {
 res.send('POST request to the homepage');
});

Express는 HTTP 요청에 해당하는 다음 라우팅 방법을 정의합니다: get, post, put, head, delete, options, Trace, copy, lock, mkcol, move, purge, propfind, proppatch, Unlock, Report, mkactivity, checkout , 병합, m-검색, 알림, 구독, 구독 취소, 패치, 검색 및 연결.

일부 라우팅 방법 이름은 올바른 JavaScript 변수 이름이 아닙니다. 이 경우 대괄호 표기법을 사용하세요. 예: app['m-search']('/', function ...
app.all()은 어떤 HTTP 메서드에도 해당하지 않는 특수 라우팅 메서드입니다. 해당 기능은 경로의 모든 요청에 ​​대해 미들웨어를 로드하는 것입니다.

아래 예에서는 GET, POST, PUT, DELETE 또는 http 모듈에서 지원하는 기타 HTTP 요청을 사용하는지 여부에 관계없이 "/secret"의 요청에 대해 핸들이 실행됩니다.

app.all('/secret', function (req, res, next) {
 console.log('Accessing the secret section ...');
 next(); // pass control to the next handler
});

라우팅 경로

라우팅 경로와 요청 방법은 함께 문자열, 문자열 패턴 또는 정규 표현식이 될 수 있는 요청의 끝점을 정의합니다.

Express는 라우팅 경로를 일치시키기 위해 path-to-regexp를 사용합니다. 라우팅 경로를 정의하는 모든 방법은 설명서를 참조하세요. Express Route Tester는 기본 Express 경로를 테스트하기 위한 훌륭한 도구이지만 패턴 일치를 지원하지 않습니다.
쿼리 문자열은 라우팅 경로의 일부가 아닙니다.

문자열을 사용한 라우팅 경로의 예:

// 匹配根路径的请求
app.get('/', function (req, res) {
 res.send('root');
});
// 匹配 /about 路径的请求
app.get('/about', function (req, res) {
 res.send('about');
});
// 匹配 /random.text 路径的请求
app.get('/random.text', function (req, res) {
 res.send('random.text');
});
使用字符串模式的路由路径示例:
// 匹配 acd 和 abcd
app.get('/ab?cd', function(req, res) {
 res.send('ab?cd');
});
// 匹配 abcd、abbcd、abbbcd等
app.get('/ab+cd', function(req, res) {
 res.send('ab+cd');
});
// 匹配 abcd、abxcd、abRABDOMcd、ab123cd等
app.get('/ab*cd', function(req, res) {
 res.send('ab*cd');
});
// 匹配 /abe 和 /abcde
app.get('/ab(cd)?e', function(req, res) {
 res.send('ab(cd)?e');
});

?, , * 및 () 문자는 정규식의 하위 집합이며, - 및 . 문자는 문자열 기반 경로로 해석됩니다.
정규식을 사용한 라우팅 경로의 예:

// 匹配任何路径中含有 a 的路径:
app.get(/a/, function(req, res) {
 res.send('/a/');
});
// 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等
app.get(/.*fly$/, function(req, res) {
 res.send('/.*fly$/');
});

경로 핸들

요청 처리를 위해 미들웨어처럼 작동하는 여러 콜백 함수를 제공할 수 있습니다. 유일한 차이점은 이러한 콜백 함수가 next('route') 메서드를 호출하고 다른 경로 콜백 함수를 건너뛸 수 있다는 것입니다. 이 메커니즘은 라우팅을 위한 전제 조건을 정의하는 데 사용될 수 있으며, 기존 경로에서 계속 실행하는 것이 타당하지 않은 경우 나머지 경로에 제어권을 줄 수 있습니다.

경로 핸들은 다양한 형태로 제공되며 아래와 같이 함수, 함수 배열 또는 이 둘의 혼합일 수 있습니다.

콜백 함수를 사용하여 라우팅 처리:

app.get('/example/a', function (req, res) {
 res.send('Hello from A!');
});

여러 콜백 함수를 사용하여 라우팅 처리(다음 객체 지정을 기억하세요):

app.get('/example/b', function (req, res, next) {
 console.log('response will be sent by the next function ...');
 next();
}, function (req, res) {
 res.send('Hello from B!');
});

콜백 함수 배열을 사용하여 라우팅 처리:

var cb0 = function (req, res, next) {
 console.log('CB0');
 next();
}
var cb1 = function (req, res, next) {
 console.log('CB1');
 next();
}
var cb2 = function (req, res) {
 res.send('Hello from C!');
}
app.get('/example/c', [cb0, cb1, cb2]);

함수와 함수 배열을 혼합하여 라우팅 처리:

var cb0 = function (req, res, next) {
 console.log('CB0');
 next();
}
var cb1 = function (req, res, next) {
 console.log('CB1');
 next();
}
app.get('/example/d', [cb0, cb1], function (req, res, next) {
 console.log('response will be sent by the next function ...');
 next();
}, function (req, res) {
 res.send('Hello from D!');
});

대응방법

다음 표의 응답 개체(res)의 메서드는 클라이언트에 응답을 반환하여 요청-응답 주기를 종료합니다. 경로 핸들에서 메서드가 호출되지 않으면 클라이언트의 요청이 중단됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.