express 중간부품 불러오기
코드상으로 보면 첫눈에
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에서 로그
11
22
가 나왔다.그럼
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
에 당신이 추가하고 싶은 각종 중간부품을 추가할 수 있습니다~~~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.