Node.js 미들웨어 가 어떻게 작 동 하 는 지 자세히 알 아 보 세 요.
4.567917.중간 부품 은 말 그대로 소프트웨어 의 한 층 과 다른 층 사이 에 놓 인 모든 것 을 의미한다
Express 미들웨어 를 만 들 고 사용 하 며 테스트 할 물건 이 필요 합 니 다.우선 Node 와 npm 가 필요 합 니 다.설치 되 어 있 는 지 확인 하기 위해 실행 가능:
npm -v && node -v
설 치 된 Node 와 NPM 버 전 을 보 셔 야 합 니 다.오류 가 발생 하면 Node 를 설치 해 야 합 니 다.모든 예 는 Node ver 8+와 NPM ver 5+에서 사용 해 야 합 니 다.본 고 는 Express 4.x 판 을 사용 하 였 다.이것 은 매우 중요 하 다.왜냐하면 3.x 판 에서 4.x 판 까지 중대 한 변경 이 있 기 때문이다.
Express 미들웨어:기초
우선 우 리 는 Express 의 가장 기본 적 인 내장 중간 부품 을 사용한다.새 항목 을 만 들 고 npm 초기 화...
npm init
npm install express --save
Create server.js and paste the following code:
const express = require('express');
const app = express();
app.get('/', (req, res, next) => {
res.send('Welcome Home');
});
app.listen(3000);
중간 부품 은 어떤 문 제 를 해결 합 니까?이 걸 왜 써 요?웹 서버 에서 Node.js 와 Express 를 사용 하여 웹 프로그램 을 실행 하고 있다 고 가정 하 십시오.이 응용 프로그램 에서 로그 인 할 페이지 가 필요 합 니 다.
웹 서버 가 데이터 요청 을 받 았 을 때 Express 는 사용자 와 요청 한 데이터 에 대한 정 보 를 포함 하 는 요청 대상 을 제공 합 니 다.Express 는 또한 응답 대상 에 접근 할 수 있 고 웹 서버 가 사용자 에 게 응답 하기 전에 수정 할 수 있 습 니 다.이 대상 들 은 보통 req,res 로 단축 된다.
미들웨어 함 수 는 관련 정 보 를 사용 하여 req 와 res 대상 을 수정 하 는 이상 적 인 장소 입 니 다.예 를 들 어 사용자 가 로그 인 한 후에 데이터베이스 에서 사용자 의 상세 한 정 보 를 얻 은 다음 에 이 상세 한 정 보 를 res.user 에 저장 할 수 있 습 니 다.
중간 부품 함 수 는 어떤 것 입 니까?
async function userMiddleware (req, res, next) {
try {
const userData = await getUserData(req.params.id); //see app.get below
if(userData) {
req.user = userData;
next();
}
} catch(error) {
res.status(500).send(error.message); //replace with proper error handling
}
}
오류 가 발생 하고 다른 코드 를 실행 하고 싶 지 않 으 면 이 함 수 를 호출 하지 마 십시오.이러한 상황 에서 응답 을 보 내야 한 다 는 것 을 기억 하 십시오.그렇지 않 으 면 클 라 이언 트 는 시간 이 초 과 될 때 까지 응답 을 기다 릴 것 입 니 다.
var app = express();
//your normal route Handlers
app.get('/user/:id', userMiddleware, userController);
미들웨어 체인미들웨어 배열 이나 여러 app.use 변조 로 미들웨어 를 연결 할 수 있 습 니 다.
app.use(middlewareA);
app.use(middlewareB);
app.get('/', [middlewareC, middlewareD], handler);
Express 가 요청 을 받 으 면 요청 과 일치 하 는 모든 미들웨어 는 작업 이 종 료 될 때 까지 초기 화 된 순서대로 실 행 됩 니 다.따라서 오류 가 발생 하면 오류 처리 에 사용 되 는 모든 미들웨어 를 순서대로 호출 하여 next()함수 가 호출 되 지 않 을 때 까지 호출 합 니 다.
Express 미들웨어 유형
공유 기 급 미들웨어,예 를 들 어 router.use
var router = express.Router()
Load router-level middleware by using the router.use() and router.METHOD() functions.
The following example creates a router as a module, loads a middleware function in it, defines some routes, and mounts the router module on a path in the main app.
var express = require(‘express');
var router = express.Router();
// a middleware function with no mount path. This code is executed for every request to the router
// logging
async function logMiddleware (req, res, next) {
try {
console.log(req.user.id, new Date());
next();
} catch() {
res.status(500).send(error.message);
}
}
// authentication
async function checkAuthentication(req, res, next) => {
// check header or url parameters or post parameters for token
const token = req.body.token || req.query.token || req.headers['x-access-token'] || req.headers['authorization'];
if (token) {
try {
// verifies secret
req.decoded = await jwt.verify(token, config.secret)
let checkUser = await authenticateTokenHelper.getUserDetail(req);
// if everything is good, save to request for use in other routes
if (checkUser) {
req.user = req.decoded
next()
} else {
return res.status(403).json({
message: responseMessage.noAuthorized
})
}
} catch (err) {
return res.status(401).json({ message: responseMessage.invalidToken })
}
} else {
// if there is no token
return res.status(400).json({ message: responseMessage.invalidRequest })
}
}
router.use(logMiddleware);
router.get('/user, checkAuthentication, handler);
내장 미들웨어Express 는 아래 에 내 장 된 미들웨어 기능 이 있 습 니 다.
오류 처리 미들웨어 는 항상 네 개의 인자(err,req,res,next)를 사용 합 니 다.너 는 네 개의 매개 변 수 를 제공 함으로써 그것 을 오류 처리 미들웨어 함수 로 표시 해 야 한다.next 대상 을 사용 할 필요 가 없 더 라 도 지정 해 야 합 니 다.그렇지 않 으 면 next 대상 은 일반적인 미들웨어 로 해석 되 고 오 류 를 처리 할 수 없습니다.기본 서명 은 다음 과 같다.
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
예 1:
app.get('/users', (req, res, next) => {
next(new Error('I am passing you an error!'));
});
app.use((err, req, res, next) => {
console.log(err);
if(!res.headersSent){
res.status(500).send(err.message);
}
});
이 경우 파이프 말단 의 오류 처리 미들웨어 가 이 오 류 를 처리 할 것 이다.내 가 res.headerssent 속성 을 검 사 했 음 을 알 수 있 을 것 이다.이것 은 응답 이 클 라 이언 트 에 레이 블 을 보 냈 는 지 확인 하 는 것 입 니 다.아직 없 으 면 클 라 이언 트 에 HTTP 500 상태 와 오류 메 시 지 를 보 냅 니 다.예 2:
중간 부품 을 잘못 처리 하 는 것 도 연결 할 수 있 습 니 다.일반적으로 서로 다른 방식 으로 서로 다른 유형의 오 류 를 처리 합 니 다.
app.get('/users, (req, res, next) => {
let err = new Error('I couldn\'t find it.');
err.httpStatusCode = 404;
next(err);
});
app.get('/user, (req, res, next) => {
let err = new Error('I\'m sorry, you can\'t do that, Dave.');
err.httpStatusCode = 304;
next(err);
});
app.use((err, req, res, next) => {
// handles not found errors
if (err.httpStatusCode === 404) {
res.status(400).render('NotFound');
}
// handles unauthorized errors
else if(err.httpStatusCode === 304){
res.status(304).render('Unauthorized');
}
// catch all
else if (!res.headersSent) {
res.status(err.httpStatusCode || 500).render('UnknownError');
}
next(err);
});
이 경우 미들웨어 검사 에서 404(not found)오류 가 발생 했 는 지 확인 합 니 다.만약 그렇다면,"NotFound"템 플 릿 페이지 를 렌 더 링 한 다음,중간 부품 의 다음 항목 에 오 류 를 전달 합 니 다다음 중간 부품 검사 에서 304(unauthorized)오류 가 발생 했 는 지 확인 합 니 다.이 경우"Unauthorized"페이지 를 렌 더 링 하고 파이프 의 다음 미들웨어 에 오 류 를 전달 합 니 다 어떤 경우 에 우 리 는 백 엔 드 에 추가 기능 을 추가 할 것 이다.Node.js 모듈 을 설치 하여 필요 한 기능 을 가 져 온 다음 응용 단계 나 공유 기 단계 에서 응용 프로그램 에 불 러 옵 니 다.
예제:body-parser 가 Content-type 요청 헤 더 를 처리 할 때 모든 미들웨어 는 해 석 된 본문 으로 req.body 속성 을 채 웁 니 다.
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({extended:false}))
app.use(bodyParser.json())
app.post('/save',(req,res)=>{
res.json({
"status":true,
"payload":req.body
})
}
app.listen(3000,(req,res)=>{
console.log('server running on port')
})
총결산미들웨어 기능 은 모든 요청 이나 특정 경로 에 대한 모든 요청 실행 코드 를 실행 하고 요청 이나 응답 데이터 에 대해 조 치 를 취 할 수 있 는 아주 좋 은 방식 이다.미들웨어 는 현대 웹 서버 의 중요 한 구성 부분 이 며 매우 유용 하 다.
이상 은 Node.js 미들웨어 가 어떻게 작 동 하 는 지 에 대한 상세 한 내용 입 니 다.Node.js 미들웨어 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
링크 ux 여러 nginx 설치Liux 에서 nginx 를 설치 할 때 보통. / configure 단계 에서 prefix 를 통 해 설치 경 로 를 설정 해 야 합 니 다.따라서... / configure 에 서로 다른 prefix 를 지정 하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.