{"id":23641948,"url":"https://github.com/jisu3817/node.js-master-express","last_synced_at":"2026-04-26T16:32:41.744Z","repository":{"id":106267103,"uuid":"376695826","full_name":"jisu3817/Node.js-master-express","owner":"jisu3817","description":"생활코딩  Node-js-express","archived":false,"fork":false,"pushed_at":"2021-12-01T14:24:24.000Z","size":1181,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-19T12:48:04.028Z","etag":null,"topics":["javascript-es6","node"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jisu3817.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-14T03:48:18.000Z","updated_at":"2021-12-01T14:24:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"34b40df0-ef5d-4f6e-8df5-6148f698ed86","html_url":"https://github.com/jisu3817/Node.js-master-express","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jisu3817/Node.js-master-express","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jisu3817%2FNode.js-master-express","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jisu3817%2FNode.js-master-express/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jisu3817%2FNode.js-master-express/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jisu3817%2FNode.js-master-express/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jisu3817","download_url":"https://codeload.github.com/jisu3817/Node.js-master-express/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jisu3817%2FNode.js-master-express/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32305035,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T09:34:17.070Z","status":"ssl_error","status_checked_at":"2026-04-26T09:34:00.993Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript-es6","node"],"created_at":"2024-12-28T10:04:58.982Z","updated_at":"2026-04-26T16:32:41.739Z","avatar_url":"https://github.com/jisu3817.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Node.js-master-express \n\n**✨ express에서 가장 중요한 기능 두가지**\n\n- 라우트\n- 미들웨어\n\n\u003e express 사용\n\n```jsx\n//express 모듈 설치하기\nnpm install express --save\n\n//express 사용 방법. (서버 실행하기)\nconst express = require('express')\nconst app = express()\nconst port = 3000\n\napp.get('/', (req, res) =\u003e {\n\tres.send('Hello Word!')\n})\n\napp.listen(port, () =\u003e {\n\t\t\tconsole.log(`${port}번 포트로 서버 가동`)\n})\n```\n\n\u003e 경로 매개 변수 (query string → clean URL)\n\nURL의 해당 위치에 지정된 값을 캡쳐하는데 사용되는 명명된 URL 세그먼트 \n\n캡쳐 된 값은 `req.params` 경로에 각 키로 지정된 경로 매개 변수 이름으로 객체에 채워진다. \n\n```jsx\n//ex)\nRoute path: /page/:pageId/:chapterId\nRequest URL: http://localhost:3000/page/html/333\nreq.params: { \"pageId\": \"html\", \"bookId\": \"333\"}\n\n//다음과 같이 경로에 매개 변수 지정\napp.get('/page/:pageId', (req, res) =\u003e {\n\tres.send(req.params)\n})\n```\n\n\u003e express redirect\n\n```jsx\n//기존 방식\nres.writeHead(302, {Location: '/'});\nres.end();\n\n//express \nres.redirect('/');\n```\n\n\u003e 미들웨어\n\n미들웨어 함수는 요청, 응답, next 애플리케이션의 요청-응답주기에 있는 함수에\n\n액세스 할 수 있는 함수\n\n`next기능`은 Express 라우터의 기능으로 호출시 현재 미들웨어에 이어서 실행될 미들웨어가 담겨 있다.\n\n현재 사용중인 미들웨어는 application-level middlewere, Third-party middlewere\n\n**미들웨어의 기능**\n\n- 코드 실행\n- 요청 및 응답 객체 변경\n- 요청-응답주기 종료\n- 스택 다음 미들웨어 호출\n\n미들웨어로드 `순서`가 중요하다. 먼저 로드 된 미들웨어 함수가 먼저 실행된다. \n\n```jsx\nvaar express = require('express')\nvar app = express()\n\napp.use((req, res, next) =\u003e {\n\tconsole.log('LOGGED')\n\tnext();\n}\n\napp.get('/', (req, res) =\u003e {\n\tres.send('Hello Word!')\n})\n\napp.listen(3000)\n```\n\n해당 미들웨어가 필요하지 않은 경우에 실행하는 것은 비효율적임 따라서 \n\napp.use를 `app.get('*', (req . . .` 으로 변경해주면 get 방식으로 들어오는 요청에만 해당 미들웨어 실행. \n\n\u003e 정적인 파일\n\n```jsx\n//정적인 파일을 호출하기 위한 미들웨어 호출\napp.use(express.static(경로));\n```\n\n\u003e 에러 처리\n\n- 404 에러 처리 (경로를 찾을 수 없을 때)\n\n미들웨어는 순서대로 실행하므로 코드에서 순서대로 경로를 찾아보고, 해당 경로가 없을 경우 에러가 실행되어야 하므로 실행 코드 `**가장 하단**`에 처리해 줘야 한다. \n\n```jsx\napp.use((req, res, next) =\u003e {\n\tres.status(404).send('Sorry cant find that!');\n});\n```\n\n- 500 에러 처리 (Writing Error Handlers)\n\nInternal server error 내부적 서버 오류 (일반적인 에러 메세지)\n\n**`404에러를 처리하는 코드 밑에 작성!`**\n\n```jsx\napp.use((err, req, res, next) =\u003e {\n\tconsole.log(err.stack)\n\tres.status(500).send('Something broke!')\n});\n//err에는 next를 통해서 전달받을 에러 데이터가 담겨있다.\n```\n\n\u003e express router\n\n일종의 미니 앱 생성 \n\n라우터를 모듈로 생성하고, 그 안에 미들웨어 기능을 로드, 일부 경로를 정의, 라우터 모듈을 메인 앱의 경로에 마운트한다. \n\n- topic.js\n\n```jsx\nconst express = require('express')\nconst router = express.Router()\n\nrouter.get('/create', (req, res) =\u003e {\n\n\t// ...\n\n\tres.send('html') \n});\n\nrouter.post('/create_process', (req, res) =\u003e {\n\t\n\t// ...\n\n\tres.redirect('/topic/${title}');\n});\n\nmodule.exports = router;\n```\n\n- 라우터 모듈 로드\n\n```jsx\nconst topicRouter = require('./topic')\n\n//..\n\napp.use('/topic', topicRouter);\n```\n\n\u003e 보안\n\n- Use Helmet\n\n보안과 관련된 여러 가지 단골 보안 이슈를 자동으로 해결해준다. \n\n```jsx\n//설치\nnpm i --save helmet\n\n//코드에서 사용하기\nconst helmet = require('hemlet');\napp.use(hemlet());\n```\n\n- nsp\n\n웹 애플리케이션이 사용하는 모듈 중 취약점이 있을 수 있으므로 dependencies를 nsp 설치를 통해 보안 체크 \n\n```jsx\n//설치\nsudo npm i nsp -g\n\n//문제가 될만한 것들이 있는지 검사 \nnsp check\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjisu3817%2Fnode.js-master-express","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjisu3817%2Fnode.js-master-express","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjisu3817%2Fnode.js-master-express/lists"}