app.use
과 함께 추가 된 미들웨어를 스택에서 제거 할 수있는 표준 방법이 있습니까? 그것은 should be possible to just modify the app.stack
array directly 인 것으로 보이지만 내가 먼저 고려해야 할 문서화 된 방법이 있는지 궁금합니다.Express 스택에서 미들웨어를 제거하는 올바른 방법은 무엇입니까?
답변
use
은 실제로 Connect (Express가 아닌) 및 all it really does is push the middleware function onto the app's stack
에서 제공됩니다.
그래서 배열의 함수를 잘 연결해야합니다.
그러나 app.stack
에 관한 문서가 없으며 미들웨어를 제거 할 수있는 기능이 없다는 것을 명심하십시오. 향후 버전의 Connect가 코드와 호환되지 않는 변경을 할 위험이 있습니다.
또는 'express'가 코드와 호환되지 않습니다. 'express '는 더 이상'connect'에 의존하지 않으므로 더 이상 작동하지 않는다고 생각합니다. – trysis
그렇게 할 수있는 방법은 없지만 작은 트릭으로 동일한 결과를 얻을 수 있습니다. 자신 만의 미들웨어 배열 (dynamicMiddleware
라고 부르 자)을 만들지 만 표현에 밀어 넣지 말고 dynamicMiddleware
에있는 모든 처리기를 비동기 적으로 순서대로 실행하는 미들웨어 하나만 밀어 넣으십시오. 배열을 통해 그 의지 루프를 한 미들웨어의 모든 동적 핸들러의 배열을 포장 : 나는 지금 그것을 테스트 할 수있는 기회가 없지만, 아이디어가 명확해야으로
const async = require('async')
// Middleware
const m1 = (req, res, next) => {
// do something here
next();
}
const m2 = (req, res, next) => {
// do something here
next();
}
const m3 = (req, res, next) => {
// do something here
next();
}
let dynamicMiddleware = [m1, m2, m3]
app.use((req, res, next) => {
// execute async handlers one by one
async.eachSeries(
// array to iterate over
dynamicMiddleware,
// iteration function
(handler, callback) => {
// call handler with req, res, and callback as next
handler(req, res, callback)
},
// final callback
(err) => {
if(err) {
// handle error as needed
} else {
// call next middleware
next()
}
}
);
})
코드는 약간 거친입니다. 배열에 핸들러를 추가하거나 제거하면 배열에 남아있는 핸들러 만 호출됩니다.
내가 아는 한 미들웨어를 제거 할 방법이 없습니다. 그러나 원하는 언제든지 미들웨어를 '비활성화'하기 위해 부울 플래그를 할당 할 수 있습니다.
var middlewareA_isActivate = true;
//Your middleware code
function(req, res, next) {
if (!middlewareA_isActivate) next();
//.........
}
//Deactivate middleware
middlewareA_isActivate = false;
이 편집 :
ExpressJs (4.x의) 코드를 읽은 후, 난 당신이 미들웨어는 app._router.stack
를 통해 스택에 액세스 할 수 있는지 알, 조작 같아요 거기에서 간다. 그래도이 트릭은 장래에 작동하지 않을 수도 있습니다.
P/s : Express가 미들웨어 스택을 직접 조작 할 때 Express가 어떻게 동작하는지 테스트하지 않았습니다.
- 1. Connect/Express 미들웨어를 테스트하는 방법은 무엇입니까?
- 2. 미들웨어를 사용하여 서버 헤더를 제거하는 방법은 무엇입니까?
- 3. 스택에서 특정 활동을 제거하는 방법은 무엇입니까?
- 4. cloud66 스택에서 redis 서버를 제거하는 방법은 무엇입니까?
- 5. 활동 백 스택에서 활동을 제거하는 방법은 무엇입니까?
- 6. 탐색 스택에서 모든보기를 제거하는 방법은 무엇입니까?
- 7. 백 스택에서 주요 활동을 제거하는 방법은 무엇입니까?
- 8. (Ajax & express js) Express js는 미들웨어를 인증합니다.
- 9. 익스프레스 4 앱 스택에서 미들웨어를 동적으로 삭제합니다.
- 10. Express 세션 미들웨어를 특정 경로로 제한하십시오.
- 11. Express/Connect 미들웨어의 요청을 "끝내는"올바른 방법은 무엇입니까?
- 12. OWIN 쿠키 미들웨어를 수동 인증 모드로 설정하는 올바른 방법은 무엇입니까?
- 13. r의 래스터 스택에서 빈 래스터를 자동으로 제거하는 방법은 무엇입니까?
- 14. 포도에 미들웨어를 추가하는 방법은 무엇입니까?
- 15. QStandardItemModel의 여러 인덱스를 제거하는 올바른 방법은 무엇입니까?
- 16. QTableWidget에서 여러 항목을 제거하는 올바른 방법은 무엇입니까?
- 17. 세계에서 시체를 제거하는 올바른 방법은 무엇입니까?
- 18. 올바른 텍스트 입력 만 제거하는 방법은 무엇입니까?
- 19. FPU 스택에서 무언가를 제거하는 가장 간단한 방법
- 20. Blend for Visual Studio Express 2015를 제거하는 방법은 무엇입니까?
- 21. 완료되면 스택에서 작업을 완전히 제거하는 방법?
- 22. 탐색 컨트롤러 스택에서 모든 ViewController를 제거하는 가장 좋은 방법은
- 23. Express 3의 모든보기에 데이터를 전달하는 방법은 무엇입니까?
- 24. Payflow 주문 검토를 위해 PayPal Express Checkout을 제거하는 방법은 무엇입니까?
- 25. 랙 미들웨어를 Rails3와 함께 사용하는 방법은 무엇입니까?
- 26. Express 요청에서 반환되는 오류 메시지를 작성하는 올바른 방법은 무엇입니까?
- 27. 안드로이드의 백 스택에서 활동을 제거하는 방법?
- 28. * 서비스 스택에서 응답 규칙을 제거하는 방법?
- 29. 다른 벤더 미들웨어에 의존하는 고속 미들웨어를 테스트하는 방법은 무엇입니까?
- 30. Connect 미들웨어를 다른 미들웨어에 액세스하는 가장 좋은 방법은 무엇입니까?
* 적절한 방법은 원치 않는 미들웨어를 추가하는 것이 아닙니다. – elmigranto
@elmigranto 그건 지나치게 단순한 견해입니다. Express Routing을보다 동적 인 방법으로 사용하고자하는 이유가 많이 있습니다. 특정 경우에 미들웨어를 추가/제거해야 할 수도 있습니다. – Brad
middlewares 스택이 app._router.stack에 있습니다. – rocketspacer