diff options
| author | Ibrahim Mkusa <ibrahimmkusa@gmail.com> | 2023-05-04 08:07:32 -0400 | 
|---|---|---|
| committer | Ibrahim Mkusa <ibrahimmkusa@gmail.com> | 2023-05-04 08:07:32 -0400 | 
| commit | ff4834445ba2a8d65c08ebbf6b422117494efd1a (patch) | |
| tree | 6fa08fb927f6287b92aa5d081cc9dca354f814ad | |
| parent | 7bcd32a67804605c0d4322a9f9c8be4829dd5df7 (diff) | |
implement REST with express
| -rw-r--r-- | practice/index.js | 21 | ||||
| -rw-r--r-- | practice/package-lock.json | 368 | ||||
| -rw-r--r-- | practice/package.json | 6 | 
3 files changed, 394 insertions, 1 deletions
diff --git a/practice/index.js b/practice/index.js index f121c37..2abb422 100644 --- a/practice/index.js +++ b/practice/index.js @@ -27,6 +27,27 @@ app.get('/api/notes', (request, response) => {    response.json(notes)  }) +app.get('/api/notes/:id', (request, response) => { +  const id = Number(request.params.id) +  const note = notes.find(note => { +    console.log(note.id, typeof note.id, id, typeof id, note.id === id) +    return note.id === id +  }) +  console.log(note) +  if (note) { +    response.json(note) +  } else { +    response.status(404).end() +  } +}) + +app.delete('/api/notes/:id', (request, response) => { +  const id = Number(request.params.id) +  const note = notes.filter(note => note.id !== id) + +  response.status(204).end() +}) +  const PORT = 3001  app.listen(PORT)  console.log(`Server running on port ${PORT}`) diff --git a/practice/package-lock.json b/practice/package-lock.json index ae6d02f..6e4d0e3 100644 --- a/practice/package-lock.json +++ b/practice/package-lock.json @@ -10,8 +10,17 @@        "license": "MIT",        "dependencies": {          "express": "^4.18.2" +      }, +      "devDependencies": { +        "nodemon": "^2.0.22"        }      }, +    "node_modules/abbrev": { +      "version": "1.1.1", +      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", +      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", +      "dev": true +    },      "node_modules/accepts": {        "version": "1.3.8",        "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -24,11 +33,39 @@          "node": ">= 0.6"        }      }, +    "node_modules/anymatch": { +      "version": "3.1.3", +      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", +      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", +      "dev": true, +      "dependencies": { +        "normalize-path": "^3.0.0", +        "picomatch": "^2.0.4" +      }, +      "engines": { +        "node": ">= 8" +      } +    },      "node_modules/array-flatten": {        "version": "1.1.1",        "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",        "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="      }, +    "node_modules/balanced-match": { +      "version": "1.0.2", +      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", +      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", +      "dev": true +    }, +    "node_modules/binary-extensions": { +      "version": "2.2.0", +      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", +      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", +      "dev": true, +      "engines": { +        "node": ">=8" +      } +    },      "node_modules/body-parser": {        "version": "1.20.1",        "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -52,6 +89,28 @@          "npm": "1.2.8000 || >= 1.4.16"        }      }, +    "node_modules/brace-expansion": { +      "version": "1.1.11", +      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", +      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", +      "dev": true, +      "dependencies": { +        "balanced-match": "^1.0.0", +        "concat-map": "0.0.1" +      } +    }, +    "node_modules/braces": { +      "version": "3.0.2", +      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", +      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", +      "dev": true, +      "dependencies": { +        "fill-range": "^7.0.1" +      }, +      "engines": { +        "node": ">=8" +      } +    },      "node_modules/bytes": {        "version": "3.1.2",        "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -72,6 +131,39 @@          "url": "https://github.com/sponsors/ljharb"        }      }, +    "node_modules/chokidar": { +      "version": "3.5.3", +      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", +      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", +      "dev": true, +      "funding": [ +        { +          "type": "individual", +          "url": "https://paulmillr.com/funding/" +        } +      ], +      "dependencies": { +        "anymatch": "~3.1.2", +        "braces": "~3.0.2", +        "glob-parent": "~5.1.2", +        "is-binary-path": "~2.1.0", +        "is-glob": "~4.0.1", +        "normalize-path": "~3.0.0", +        "readdirp": "~3.6.0" +      }, +      "engines": { +        "node": ">= 8.10.0" +      }, +      "optionalDependencies": { +        "fsevents": "~2.3.2" +      } +    }, +    "node_modules/concat-map": { +      "version": "0.0.1", +      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", +      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", +      "dev": true +    },      "node_modules/content-disposition": {        "version": "0.5.4",        "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -196,6 +288,18 @@          "node": ">= 0.10.0"        }      }, +    "node_modules/fill-range": { +      "version": "7.0.1", +      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", +      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", +      "dev": true, +      "dependencies": { +        "to-regex-range": "^5.0.1" +      }, +      "engines": { +        "node": ">=8" +      } +    },      "node_modules/finalhandler": {        "version": "1.2.0",        "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -229,6 +333,20 @@          "node": ">= 0.6"        }      }, +    "node_modules/fsevents": { +      "version": "2.3.2", +      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", +      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", +      "dev": true, +      "hasInstallScript": true, +      "optional": true, +      "os": [ +        "darwin" +      ], +      "engines": { +        "node": "^8.16.0 || ^10.6.0 || >=11.0.0" +      } +    },      "node_modules/function-bind": {        "version": "1.1.1",        "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -247,6 +365,18 @@          "url": "https://github.com/sponsors/ljharb"        }      }, +    "node_modules/glob-parent": { +      "version": "5.1.2", +      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", +      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", +      "dev": true, +      "dependencies": { +        "is-glob": "^4.0.1" +      }, +      "engines": { +        "node": ">= 6" +      } +    },      "node_modules/has": {        "version": "1.0.3",        "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -258,6 +388,15 @@          "node": ">= 0.4.0"        }      }, +    "node_modules/has-flag": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", +      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", +      "dev": true, +      "engines": { +        "node": ">=4" +      } +    },      "node_modules/has-symbols": {        "version": "1.0.3",        "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -295,6 +434,12 @@          "node": ">=0.10.0"        }      }, +    "node_modules/ignore-by-default": { +      "version": "1.0.1", +      "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", +      "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", +      "dev": true +    },      "node_modules/inherits": {        "version": "2.0.4",        "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -308,6 +453,48 @@          "node": ">= 0.10"        }      }, +    "node_modules/is-binary-path": { +      "version": "2.1.0", +      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", +      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", +      "dev": true, +      "dependencies": { +        "binary-extensions": "^2.0.0" +      }, +      "engines": { +        "node": ">=8" +      } +    }, +    "node_modules/is-extglob": { +      "version": "2.1.1", +      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", +      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", +      "dev": true, +      "engines": { +        "node": ">=0.10.0" +      } +    }, +    "node_modules/is-glob": { +      "version": "4.0.3", +      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", +      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", +      "dev": true, +      "dependencies": { +        "is-extglob": "^2.1.1" +      }, +      "engines": { +        "node": ">=0.10.0" +      } +    }, +    "node_modules/is-number": { +      "version": "7.0.0", +      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", +      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", +      "dev": true, +      "engines": { +        "node": ">=0.12.0" +      } +    },      "node_modules/media-typer": {        "version": "0.3.0",        "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -359,6 +546,18 @@          "node": ">= 0.6"        }      }, +    "node_modules/minimatch": { +      "version": "3.1.2", +      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", +      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", +      "dev": true, +      "dependencies": { +        "brace-expansion": "^1.1.7" +      }, +      "engines": { +        "node": "*" +      } +    },      "node_modules/ms": {        "version": "2.0.0",        "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -372,6 +571,73 @@          "node": ">= 0.6"        }      }, +    "node_modules/nodemon": { +      "version": "2.0.22", +      "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", +      "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", +      "dev": true, +      "dependencies": { +        "chokidar": "^3.5.2", +        "debug": "^3.2.7", +        "ignore-by-default": "^1.0.1", +        "minimatch": "^3.1.2", +        "pstree.remy": "^1.1.8", +        "semver": "^5.7.1", +        "simple-update-notifier": "^1.0.7", +        "supports-color": "^5.5.0", +        "touch": "^3.1.0", +        "undefsafe": "^2.0.5" +      }, +      "bin": { +        "nodemon": "bin/nodemon.js" +      }, +      "engines": { +        "node": ">=8.10.0" +      }, +      "funding": { +        "type": "opencollective", +        "url": "https://opencollective.com/nodemon" +      } +    }, +    "node_modules/nodemon/node_modules/debug": { +      "version": "3.2.7", +      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", +      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", +      "dev": true, +      "dependencies": { +        "ms": "^2.1.1" +      } +    }, +    "node_modules/nodemon/node_modules/ms": { +      "version": "2.1.3", +      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", +      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", +      "dev": true +    }, +    "node_modules/nopt": { +      "version": "1.0.10", +      "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", +      "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", +      "dev": true, +      "dependencies": { +        "abbrev": "1" +      }, +      "bin": { +        "nopt": "bin/nopt.js" +      }, +      "engines": { +        "node": "*" +      } +    }, +    "node_modules/normalize-path": { +      "version": "3.0.0", +      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", +      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", +      "dev": true, +      "engines": { +        "node": ">=0.10.0" +      } +    },      "node_modules/object-inspect": {        "version": "1.12.3",        "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -404,6 +670,18 @@        "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",        "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="      }, +    "node_modules/picomatch": { +      "version": "2.3.1", +      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", +      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", +      "dev": true, +      "engines": { +        "node": ">=8.6" +      }, +      "funding": { +        "url": "https://github.com/sponsors/jonschlinkert" +      } +    },      "node_modules/proxy-addr": {        "version": "2.0.7",        "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -416,6 +694,12 @@          "node": ">= 0.10"        }      }, +    "node_modules/pstree.remy": { +      "version": "1.1.8", +      "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", +      "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", +      "dev": true +    },      "node_modules/qs": {        "version": "6.11.0",        "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -452,6 +736,18 @@          "node": ">= 0.8"        }      }, +    "node_modules/readdirp": { +      "version": "3.6.0", +      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", +      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", +      "dev": true, +      "dependencies": { +        "picomatch": "^2.2.1" +      }, +      "engines": { +        "node": ">=8.10.0" +      } +    },      "node_modules/safe-buffer": {        "version": "5.2.1",        "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -476,6 +772,15 @@        "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",        "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="      }, +    "node_modules/semver": { +      "version": "5.7.1", +      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", +      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", +      "dev": true, +      "bin": { +        "semver": "bin/semver" +      } +    },      "node_modules/send": {        "version": "0.18.0",        "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -536,6 +841,27 @@          "url": "https://github.com/sponsors/ljharb"        }      }, +    "node_modules/simple-update-notifier": { +      "version": "1.1.0", +      "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", +      "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", +      "dev": true, +      "dependencies": { +        "semver": "~7.0.0" +      }, +      "engines": { +        "node": ">=8.10.0" +      } +    }, +    "node_modules/simple-update-notifier/node_modules/semver": { +      "version": "7.0.0", +      "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", +      "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", +      "dev": true, +      "bin": { +        "semver": "bin/semver.js" +      } +    },      "node_modules/statuses": {        "version": "2.0.1",        "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -544,6 +870,30 @@          "node": ">= 0.8"        }      }, +    "node_modules/supports-color": { +      "version": "5.5.0", +      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", +      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", +      "dev": true, +      "dependencies": { +        "has-flag": "^3.0.0" +      }, +      "engines": { +        "node": ">=4" +      } +    }, +    "node_modules/to-regex-range": { +      "version": "5.0.1", +      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", +      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", +      "dev": true, +      "dependencies": { +        "is-number": "^7.0.0" +      }, +      "engines": { +        "node": ">=8.0" +      } +    },      "node_modules/toidentifier": {        "version": "1.0.1",        "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -552,6 +902,18 @@          "node": ">=0.6"        }      }, +    "node_modules/touch": { +      "version": "3.1.0", +      "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", +      "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", +      "dev": true, +      "dependencies": { +        "nopt": "~1.0.10" +      }, +      "bin": { +        "nodetouch": "bin/nodetouch.js" +      } +    },      "node_modules/type-is": {        "version": "1.6.18",        "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -564,6 +926,12 @@          "node": ">= 0.6"        }      }, +    "node_modules/undefsafe": { +      "version": "2.0.5", +      "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", +      "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", +      "dev": true +    },      "node_modules/unpipe": {        "version": "1.0.0",        "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", diff --git a/practice/package.json b/practice/package.json index 386d04f..bd6ec20 100644 --- a/practice/package.json +++ b/practice/package.json @@ -5,11 +5,15 @@    "main": "index.js",    "scripts": {      "test": "echo \"Error: no test specified\" && exit 1", -    "start": "node ./index.js" +    "start": "node ./index.js", +    "dev": "nodemon index.js"    },    "author": "Ibrahim Mkusa",    "license": "MIT",    "dependencies": {      "express": "^4.18.2" +  }, +  "devDependencies": { +    "nodemon": "^2.0.22"    }  }  | 
