Node.js에서 연결/표현 미들웨어를 유지 관리하는 가장 깨끗한 방법

10950 단어 javascriptnode
원래 게시됨cri.dev

Node.js에서 간단한 HTTP API를 위한 connect/express 미들웨어를 유지 관리하는 방법을 공유하고 싶습니다.

아래 코드 스니펫은 pomodoro.cc api source code 에서 가져왔습니다.

미들웨어 정의



아래에서 배열로 내보낸 모든 미들웨어를 포함하는 간단한 파일을 볼 수 있습니다.

이 예에서 사용 중인 미들웨어는 다음과 같습니다.
  • cookie-parser 쿠키를 구문 분석합니다. 세션용
  • body-parser JSON 본문을 처리하기 위해
  • cors CORS 관련 두통 완화

  • 로깅용morgan

  • the order of connect middlewares is important, as it can be seen as a pipeline of handlers, executed one by one.



    이것이 예를 들어 쿠키나 요청 본문을 구문 분석하기 전에 CORS 요청을 처리해야 하는 이유입니다.

    const cookieParser = require('cookie-parser')
    const bodyParser = require('body-parser')
    const cors = require('cors')
    const morgan = require('morgan')
    
    module.exports = [
      morgan(':status\t :method\t :response-time ms\t :date[clf]\t :url\t\t'),
      cors({
        origin: true,
        methods: ['HEAD', 'GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
        allowedHeaders: ['x-now-id', 'x-now-trace', 'x-powered-by', 'Origin', 'Accept', 'Content-Type', 'Set-Cookie'],
        credentials: true
      }),
      cookieParser(),
      bodyParser.json({}),
      bodyParser.urlencoded({ extended: true })
    ]
    


    you can call this file middlewares.js to follow along with the code



    미들웨어 사용



    다음 코드 스니펫에서 Node.js의 베어본 연결/익스프레스 애플리케이션에서 미들웨어의 사용 예를 볼 수 있습니다.

    const app = require('express')()
    const middlewares = require('./middlewares')
    app.use(...middlewares)
    app.post('/hello', (req, res) => res.json(`hello ${req.body.name}`))
    app.listen(process.env.HTTP_PORT || 3000)
    console.log('listening on http://localhost:3000')
    


    그리고 실행

    node index.js
    


    요청하다



    서버가 포트3000에서 수신 대기하면 다음을 실행하고 curl 로 미들웨어가 작동하는 것을 볼 수 있습니다!

    다음과 유사한 출력이 표시됩니다.

    > curl -vv -X POST -H 'Content-Type: application/json' http://localhost:3000/hello --data '{"name": "chris"}'
    
    ...
    ...
    < HTTP/1.1 200 OK
    < X-Powered-By: Express
    < Access-Control-Allow-Credentials: true
    < Content-Type: application/json; charset=utf-8
    < Content-Length: 13
    < Vary: Origin
    < ETag: W/"d-WPAgGvBxJ3QraEI06EWKezzLidE"
    < Date: Tue, 28 Jan 2020 22:36:18 GMT
    < Connection: keep-alive
    <
    
    "hello chris"*
    


    헤더Access-Control-Allow-Credentials가 보이시나요?

    예를 들어 CORS 미들웨어가 들어오는 곳은 현재 CORS 요청에 대한 자격 증명을 허용하도록 구성되어 있습니다.

    middlewares.js에서 볼 수 있듯이:

    ...
      cors({
        origin: true,
        methods: ['HEAD', 'GET', 'POST', 'PUT', 'PATCH', 'DELETE'],
        allowedHeaders: ['x-now-id', 'x-now-trace', 'x-powered-by', 'Origin', 'Accept', 'Content-Type', 'Set-Cookie'],
        credentials: true
      }),
    ...
    



    질문이 있거나 미들웨어를 처리하는 더 나은 방법을 찾으면 알려주세요!

    좋은 웹페이지 즐겨찾기