express 중간부품 불러오기

2569 단어
middleware,express의 거의 모든 것은 중간부품을 통해 이루어진다.제3자의 중간부품을 대량으로 채택하다.그런데 어떻게 일하러 왔을까, 한 걸음 한 걸음 열어보자.
코드상으로 보면 첫눈에 app.use()야.express-generator를 사용하여express 응용 프로그램을 구축한 후 app.js 파일에서 아래 코드를 볼 수 있습니다.(코드가 많기 때문에 절선이 있다).
var express = require('express');
var bodyParser = require('body-parser');
var routes = require('./routes/index');

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);

위 코드에서 분명히 알 수 있듯이 app.use()는 이 중간부품을 불러오는 데 쓰인다.문서를 뒤져 보면 use()는 두 개의 매개 변수를 받아들인다. 첫 번째path는 옵션이고 두 번째는 중간부품의 함수이다.
그럼 우리가 직접 뭘 써서 실행할 수 있는지 시험해 보자.
app.use(express.static(path.join(__dirname, 'public')));

app.use(function(req, res, next) {
  console.log('11');
  next();
})

app.use(function(req, res, next) {
  console.log(22);
  next();
})

app.use('/', routes);

이러한 상황에서 우리가 본 응답은 여전히 정확하고 console에서 로그1122가 나왔다.
그럼 console.log('11') 안에 있는next()를 취소해 봅시다. 이때 명령줄에서 콘솔이 11이 나온 후에 모두 실행하지 않고 루트도 응답하지 않습니다.
ok, 여기 도착했을 때 app.use() 안에 있는 것들이 순서대로 실행된다는 것을 알았습니다. 그러면 이것을tasks로 상상하고 요청할 때 순서대로 next() 호출하기 전에 등록된 중간부품을 통해 필터할 수 있습니다.앱을 사용합니다.use () '정의된' 중간부품의 순서가 매우 중요합니다. 순서대로 실행될 것입니다. use의 선후 순서가 중간부품의 우선순위를 결정합니다.예를 들면 보통express.logger () 는 모든 요청을 기록하는 가장 먼저 사용하는 구성 요소입니다.
넥스트 () 없이는 계속 전달할 수 없습니다.
그러면 우리는 이 중간부품이 어떻게 탑재되었는지 알겠는데, 이것next()은 또 어떻게 실현되었는가?우리는 한 걸음 한 걸음 간단한 next()를 실현해 보았다.
var http = require('http');

function express() {
    var fns = [];
    
    var expr = function(req, res) {
        var i = 0;
        function next() {
            var task = fns[i++];
            if ( ! task) {
                return;
            }
            task(req, res, next);
        }
        next();
    }
    
    expr.use = function(fn) {
        fns.push(fn);
    }
    
    return expr;
}

var app = express();

app.use(function(req, res, next) {
    console.log('req');
    next();
})

app.use(function(req, res, next) {
    console.log('done');
    next();
})

app.use(function(req, res, next) {
    res.end('over');
    next();
})

http.createServer(app).listen('3000');

이렇게 하면 use에 당신이 추가하고 싶은 각종 중간부품을 추가할 수 있습니다~~~

좋은 웹페이지 즐겨찾기