> 웹 프론트엔드 > JS 튜토리얼 > Express 미들웨어란 무엇입니까? 노드에서 어떻게 사용하나요?

Express 미들웨어란 무엇입니까? 노드에서 어떻게 사용하나요?

青灯夜游
풀어 주다: 2022-02-10 19:01:35
앞으로
2092명이 탐색했습니다.

Express 미들웨어란 무엇인가요? Node에서 어떻게 사용하나요? 다음 글에서는 Express 미들웨어의 간단한 사용법을 소개하겠습니다. 도움이 되셨으면 좋겠습니다!

Express 미들웨어란 무엇입니까? 노드에서 어떻게 사용하나요?

1. 익스프레스 미들웨어란

미들웨어는 구체적으로 비즈니스 프로세스의 중간 처리 링크를 말합니다.

2. Express 미들웨어 호출 프로세스

요청이 Express 서버에 도달하면 여러 미들웨어를 지속적으로 호출하여 요청을 전처리할 수 있습니다.

3. 미들웨어 형식

은 본질적으로 함수 처리 함수입니다.

참고: 미들웨어 함수의 형식 매개변수 목록에는 다음 매개변수가 포함되어야 합니다. 라우팅 처리 함수에는 req와 res만 포함되어 있습니다.

// next参数必须在最后一个传入
const mw = (req, res, next) => {
    ...
    // next()必须在最后调用
    next()
}
로그인 후 복사

4. next() 함수의 역할

next 함수는 여러 미들웨어의 연속 호출을 구현하는 핵심입니다. 순환 관계를 다음 미들웨어로 옮기는 것을 의미합니다. 또는 라우팅.

5. 전역적으로 유효한 미들웨어

클라이언트가 시작한 모든 요청은 서버에 도달한 후 미들웨어를 트리거하며, 이를 전역적으로 유효한 미들웨어라고 합니다. server.use(미들웨어 함수)를 호출하면 전역적으로 유효한 미들웨어를 정의할 수 있습니다. 샘플 코드는 다음과 같습니다.

const mw = (req, res, next) => {
    next()
}

const mw1 = (req, res, next) => {
    next()
}

// 全局生效的中间件,中间件调用顺序以传入顺序为准
server.use(mw,mw1)
로그인 후 복사

6. 로컬로 유효한 미들웨어

로컬 미들웨어는 지정된 라우팅 경로에서만 작동합니다. 유효

const mw = (req, res, next) => {
    next()
}
const mw1 = (req, res, next) => {
    next()
}
// 局部生效的中间件
server.get('/',mw,(req,res)=>{
    res.send('路径:/')
})



// 定义多个局部生效的中间件
// 1、直接逗号分隔
server.get('/',mw,mw1,(req,res)=>{
    res.send('路径:/')
})
// 2、或者使用数组包含
server.get('/',[mw,mw1],(req,res)=>{
    res.send('路径:/')
})
로그인 후 복사

7. 미들웨어의 역할

여러 미들웨어가 동일한 req와 res를 공유합니다. 이 기능을 기반으로 다운스트림 미들웨어 또는 라우팅에서 사용할 수 있도록 업스트림 미들웨어의 req 또는 res 개체에 사용자 정의 특성이나 메서드를 균일하게 추가할 수 있습니다.

const mw = (req, res, next) => {
    // 添加属性
    req.startTime=new Date()
    next()
}
로그인 후 복사

8. Express 미들웨어 주의사항 5가지

  • 라우팅 전 반드시 미들웨어를 등록하세요

  • 클라이언트에서 보낸 요청은 처리를 위해 여러 미들웨어를 지속적으로 호출할 수 있습니다

  • 비즈니스 실행 후 미들웨어의 코드에서는 next() 함수 호출을 잊지 마세요

  • 코드 로직 혼란을 방지하기 위해 next() 함수 호출 후 추가 코드를 작성하지 마세요

  • 여러 미들웨어를 연속적으로 호출할 경우, 여러 미들웨어 간에 req 및 res 객체 공유

9. Express 미들웨어 분류

  • 애플리케이션 수준 미들웨어

  • 경로 수준 미들웨어

  • 오류 수준 미들웨어

  • 익스프레스 내장- 미들웨어

  • 타사 미들웨어

자세한 소개:

  • 애플리케이션 수준 미들웨어

    app.use() 또는 app.get( ) 또는 app.post()를 통해 미들웨어가 바인딩됨 앱 인스턴스를 애플리케이션 수준 미들웨어라고 합니다. 코드 예제는 다음과 같습니다.

    // 全局生效的中间件(应用级别的中间件)
    server.use(mw,mw1)
    // 局部生效的中间件(应用级别的中间件)
    server.get('/',mw,mw1,(req,res)=>{
        res.send(`请求进入服务器的时间:${req.startTime}`)
    })
    로그인 후 복사
  • Routing-level middleware

    bound to express.Router() 인스턴스의 미들웨어를 라우팅 수준 미들웨어라고 합니다. 사용법은 애플리케이션 수준 미들웨어와 다르지 않습니다. 단, 애플리케이션 수준 미들웨어는 앱 인스턴스에 바인딩되고, 라우팅 수준 미들웨어는 라우터 인스턴스에 바인딩됩니다. 코드 예시는 다음과 같습니다.

    const router = require('./router/router')
    // 路由级别的中间件
    router.use((req,res,next)=>{
        next()
    })
    로그인 후 복사
  • 오류 수준 미들웨어

    오류 수준 미들웨어의 역할 : Specialized 프로젝트 전반에 걸쳐 발생하는 비정상적인 오류를 캡쳐하여 프로젝트가 비정상적으로 충돌하는 것을 방지하는데 사용됩니다.

    Format: 오류 수준 미들웨어의 함수 처리 기능에는 4개의 형식 매개변수가 있어야 하며 형식 매개변수의 순서는 앞에서 뒤로(err, req, res, next)입니다.

    참고: 오류 수준 미들웨어는 모든 경로 후에 등록해야 합니다!

    // 人为制造错误
    server.get('/err', (req, res) => {
        throw new Error('人为抛出错误!!!')
        res.send('err Page')
    })
    // 定义错误级别的中间件
    server.use((err, req, res, next) => {
        console.log('发生了错误:' + err.message);
        res.send('Error:'+err.message)
        next()
    })
    로그인 후 복사
  • Express의 내장 미들웨어

    Express 4.16.0 버전부터 Express에는 일반적으로 사용되는 3가지 미들웨어가 내장되어 있어 크게 향상되었습니다. Express 프로젝트의 개발 효율성 및 경험:

    • express.static은 HTML 파일, 이미지, CSS 스타일 등과 같은 정적 리소스를 빠르게 호스팅하는 내장 미들웨어입니다. (호환성 없음)

    • express .json JSON 형식의 요청 본문 데이터 구문 분석(호환성 있음, 버전 4.16.0 이상에서만 사용 가능)

    • express.urlencoded URL 인코딩 형식의 요청 본문 데이터 구문 분석(호환성 있음, 버전 4.16.0 이상에서만 사용 가능) ) 사용 가능)

    // 配置解析application/json格式数据的内置中间件
    server.use(express.json())
    // 配置解析application/x-www-form-urlencoded格式数据的内置中间件
    server.use(express.urlencoded({
        extended: false
    }))
    // 测试解析json的内置中间件
    server.post('/user',(req,res)=>{
        // 在服务器,可以使用req.body这个属性来接受客户端发送过来的请求数据
        // 默认情况下,如果不配置解析表单数据的中间件,则req.body默认等于undefined
        console.log(req.body);
        res.send('ok')
    })
    
    // 测试解析urlencoded的内置中间件
    server.post('/book',(req,res)=>{
        console.log(req.body)
        res.send('book ok')
    })
    로그인 후 복사
  • 타사 미들웨어

    는 공식적으로 Express에 내장되어 있지 않지만 타사 미들웨어라고 하는 타사에 의해 개발되었습니다. 프로젝트에서는 필요에 따라 타사 미들웨어를 다운로드하고 구성할 수 있으므로 프로젝트의 개발 효율성이 향상됩니다. 예: express@4.16.0 이전 버전에서는 타사 미들웨어 body-parser가 요청 본문 데이터를 구문 분석하는 데 자주 사용되었습니다. 사용 단계는 다음과 같습니다. express@4.16.0之前的版本中,经常使用body-parser这个第三方中间件,来解析请求体数据。使用步骤如下:

    • 运行npm install body-parser安装中间件

    • 使用require导入中间件

    • 调用server.use()

      🎜🎜 npm install body-parser를 실행하여 미들웨어를 설치합니다. 🎜🎜🎜🎜 require를 사용하여 미들웨어를 가져옵니다. 🎜🎜🎜🎜server.use( ) 미들웨어 등록 및 사용 🎜

    참고: Express에 내장된 express.urlencoded 미들웨어는 타사 미들웨어 body-parser를 기반으로 추가로 캡슐화됩니다.

  • 노드 관련 지식을 더 보려면 nodejs 튜토리얼을 방문하세요!

    위 내용은 Express 미들웨어란 무엇입니까? 노드에서 어떻게 사용하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:juejin.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿