From 860e0d164575c233a350bc9ab1d1f74518a50d21 Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 31 Oct 2021 15:55:13 -0600 Subject: [PATCH 01/11] build(Scaffold): dummy endpoints creates dummy endpoints --- api/server.js | 31 ++ index.js | 5 + package-lock.json | 869 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 1 + 4 files changed, 898 insertions(+), 8 deletions(-) diff --git a/api/server.js b/api/server.js index debefd72b..249f9a1a2 100755 --- a/api/server.js +++ b/api/server.js @@ -1,2 +1,33 @@ // implement your server here // require your posts router and connect it here +const express = require("express"); + +const server = express(); + +const POST_URL = "/api/posts"; + +server.get(POST_URL, (req, res) => { + res.send(`GET response ${POST_URL}`); +}); + +server.get(`${POST_URL}/:id`, (req, res) => { + res.send(`GET response ${POST_URL}/:id`); +}); + +server.post(POST_URL, (req, res) => { + res.send(`POST response ${POST_URL}`); +}); + +server.put(`${POST_URL}/:id`, (req, res) => { + res.send(`PUT response ${POST_URL}/:id`); +}); + +server.delete(`${POST_URL}/:id`, (req, res) => { + res.send(`DELETE response ${POST_URL}/:id`); +}); + +server.get(`${POST_URL}/:id/comments`, (req, res) => { + res.send(`GET response ${POST_URL}/:id/comments`); +}); + +module.exports = server; diff --git a/index.js b/index.js index e8db406a9..e8a40820b 100755 --- a/index.js +++ b/index.js @@ -1 +1,6 @@ // require your server and launch it here +const server = require("./api/server"); + +server.listen(5000, () => { + console.log("server listening on port 5000"); +}); diff --git a/package-lock.json b/package-lock.json index 510b61079..507f10409 100755 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "node-api2-project", "version": "0.0.1", "dependencies": { + "express": "^4.17.1", "knex": "^0.95.11", "sqlite3": "^5.0.2" }, @@ -1167,6 +1168,18 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", @@ -1372,6 +1385,11 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, "node_modules/asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -1563,6 +1581,47 @@ "node": "0.4 || >=0.5.8" } }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -1685,6 +1744,14 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -2004,6 +2071,25 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -2013,6 +2099,19 @@ "safe-buffer": "~5.1.1" } }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, "node_modules/cookiejar": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", @@ -2198,6 +2297,19 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, "node_modules/detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -2288,6 +2400,11 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, "node_modules/electron-to-chromium": { "version": "1.3.873", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.873.tgz", @@ -2312,6 +2429,14 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -2350,6 +2475,11 @@ "node": ">=8" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2616,6 +2746,14 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -2677,6 +2815,67 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/express/node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -2749,6 +2948,36 @@ "node": ">=8" } }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -2813,6 +3042,22 @@ "url": "https://ko-fi.com/tunnckoCore/commissions" } }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fs-minipass": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", @@ -3182,6 +3427,26 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, "node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -3344,6 +3609,14 @@ "node": ">= 0.10" } }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "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", @@ -4542,6 +4815,19 @@ "tmpl": "1.0.x" } }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4552,7 +4838,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true, "engines": { "node": ">= 0.6" } @@ -4586,7 +4871,6 @@ "version": "1.50.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", - "devOptional": true, "engines": { "node": ">= 0.6" } @@ -4595,7 +4879,6 @@ "version": "2.1.33", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", - "devOptional": true, "dependencies": { "mime-db": "1.50.0" }, @@ -4705,6 +4988,14 @@ "ms": "^2.1.1" } }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", @@ -5067,6 +5358,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5219,6 +5521,14 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5250,6 +5560,11 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -5375,6 +5690,18 @@ "node": ">= 6" } }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -5427,6 +5754,28 @@ "node": ">=0.6" } }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -5734,11 +6083,82 @@ "semver": "bin/semver.js" } }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -5886,6 +6306,14 @@ "node": ">=8" } }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -6182,6 +6610,14 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -6286,6 +6722,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -6322,6 +6770,14 @@ "node": ">= 4.0.0" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -6376,6 +6832,14 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -6415,6 +6879,14 @@ "node": ">= 8" } }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -7661,6 +8133,15 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, "acorn": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", @@ -7815,6 +8296,11 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -7969,6 +8455,43 @@ "inherits": "~2.0.0" } }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + } + } + }, "boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -8062,6 +8585,11 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, "cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -8314,6 +8842,19 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, "convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -8323,6 +8864,16 @@ "safe-buffer": "~5.1.1" } }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, "cookiejar": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", @@ -8466,6 +9017,16 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -8534,6 +9095,11 @@ "safer-buffer": "^2.1.0" } }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, "electron-to-chromium": { "version": "1.3.873", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.873.tgz", @@ -8552,6 +9118,11 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -8581,6 +9152,11 @@ "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -8772,6 +9348,11 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -8817,6 +9398,63 @@ } } }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + } + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -8880,6 +9518,35 @@ "to-regex-range": "^5.0.1" } }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -8929,6 +9596,16 @@ "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==", "dev": true }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, "fs-minipass": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", @@ -9214,6 +9891,25 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -9336,6 +10032,11 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -10257,6 +10958,16 @@ "tmpl": "1.0.x" } }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -10266,8 +10977,7 @@ "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { "version": "4.0.4", @@ -10288,14 +10998,12 @@ "mime-db": { "version": "1.50.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", - "devOptional": true + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==" }, "mime-types": { "version": "2.1.33", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", - "devOptional": true, "requires": { "mime-db": "1.50.0" } @@ -10388,6 +11096,11 @@ } } }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, "node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", @@ -10664,6 +11377,14 @@ "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -10779,6 +11500,11 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -10801,6 +11527,11 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -10895,6 +11626,15 @@ "sisteransi": "^1.0.5" } }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -10938,6 +11678,22 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "optional": true }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -11180,11 +11936,74 @@ } } }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -11294,6 +12113,11 @@ } } }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -11521,6 +12345,11 @@ "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -11597,6 +12426,15 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -11627,6 +12465,11 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, "update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", @@ -11672,6 +12515,11 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -11703,6 +12551,11 @@ } } }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", diff --git a/package.json b/package.json index 79e3779cd..6e6c9be70 100755 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "resetdb": "knex migrate:rollback && knex migrate:latest && knex seed:run" }, "dependencies": { + "express": "^4.17.1", "knex": "^0.95.11", "sqlite3": "^5.0.2" }, From 94b97b9921c1acdf1d58d92025166889ff86f7e9 Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 31 Oct 2021 16:15:46 -0600 Subject: [PATCH 02/11] + HTTP response codes --- api/server.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/api/server.js b/api/server.js index 249f9a1a2..de93fb474 100755 --- a/api/server.js +++ b/api/server.js @@ -7,27 +7,27 @@ const server = express(); const POST_URL = "/api/posts"; server.get(POST_URL, (req, res) => { - res.send(`GET response ${POST_URL}`); + res.status(200).send(`GET response ${POST_URL}`); }); server.get(`${POST_URL}/:id`, (req, res) => { - res.send(`GET response ${POST_URL}/:id`); + res.status(200).send(`GET response ${POST_URL}/:id`); }); server.post(POST_URL, (req, res) => { - res.send(`POST response ${POST_URL}`); + res.status(201).send(`POST response ${POST_URL}`); }); server.put(`${POST_URL}/:id`, (req, res) => { - res.send(`PUT response ${POST_URL}/:id`); + res.status(200).send(`PUT response ${POST_URL}/:id`); }); server.delete(`${POST_URL}/:id`, (req, res) => { - res.send(`DELETE response ${POST_URL}/:id`); + res.status(200).send(`DELETE response ${POST_URL}/:id`); }); server.get(`${POST_URL}/:id/comments`, (req, res) => { - res.send(`GET response ${POST_URL}/:id/comments`); + res.status(200).send(`GET response ${POST_URL}/:id/comments`); }); module.exports = server; From c965945f69b92ad12fadfdd6fd38b718551c7781 Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 31 Oct 2021 17:57:34 -0600 Subject: [PATCH 03/11] Fetches posts from db --- api/posts/posts-router.js | 31 +++++++++++++++++++++++++++++++ api/server.js | 27 ++------------------------- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/api/posts/posts-router.js b/api/posts/posts-router.js index aa8b0143f..e6f7ab7c0 100755 --- a/api/posts/posts-router.js +++ b/api/posts/posts-router.js @@ -1 +1,32 @@ // implement your posts router here +const express = require("express"); + +const server = express(); +const model = require("./posts-model"); + +server.get("/", async (req, res) => { + const posts = await model.find(); + res.status(200).send(posts); +}); + +server.get(`/:id`, (req, res) => { + res.status(200).send(`GET response /:id`); +}); + +server.post("/", (req, res) => { + res.status(201).send(`POST response `); +}); + +server.put(`/:id`, (req, res) => { + res.status(200).send(`PUT response /:id`); +}); + +server.delete(`/:id`, (req, res) => { + res.status(200).send(`DELETE response /:id`); +}); + +server.get(`/:id/comments`, (req, res) => { + res.status(200).send(`GET response /:id/comments`); +}); + +module.exports = server; diff --git a/api/server.js b/api/server.js index de93fb474..edbd2c9ac 100755 --- a/api/server.js +++ b/api/server.js @@ -1,33 +1,10 @@ // implement your server here // require your posts router and connect it here const express = require("express"); +const postRouter = require("./posts/posts-router"); const server = express(); -const POST_URL = "/api/posts"; - -server.get(POST_URL, (req, res) => { - res.status(200).send(`GET response ${POST_URL}`); -}); - -server.get(`${POST_URL}/:id`, (req, res) => { - res.status(200).send(`GET response ${POST_URL}/:id`); -}); - -server.post(POST_URL, (req, res) => { - res.status(201).send(`POST response ${POST_URL}`); -}); - -server.put(`${POST_URL}/:id`, (req, res) => { - res.status(200).send(`PUT response ${POST_URL}/:id`); -}); - -server.delete(`${POST_URL}/:id`, (req, res) => { - res.status(200).send(`DELETE response ${POST_URL}/:id`); -}); - -server.get(`${POST_URL}/:id/comments`, (req, res) => { - res.status(200).send(`GET response ${POST_URL}/:id/comments`); -}); +server.use("/api/posts", postRouter); module.exports = server; From 31aad655f5819f1f5d52f4515632d0fff306cfec Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 31 Oct 2021 18:14:30 -0600 Subject: [PATCH 04/11] Adds error handling for GET --- api/posts/posts-router.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/api/posts/posts-router.js b/api/posts/posts-router.js index e6f7ab7c0..2e49f7fc9 100755 --- a/api/posts/posts-router.js +++ b/api/posts/posts-router.js @@ -5,8 +5,12 @@ const server = express(); const model = require("./posts-model"); server.get("/", async (req, res) => { - const posts = await model.find(); - res.status(200).send(posts); + try { + const posts = await model.find(); + res.status(200).send(posts); + } catch (err) { + res.status(500).send({ error: err }); + } }); server.get(`/:id`, (req, res) => { From c24e8d89f8bbeb96dec499ff02384c1d52eb4a51 Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 31 Oct 2021 18:19:14 -0600 Subject: [PATCH 05/11] fetches single post --- api/posts/posts-router.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/api/posts/posts-router.js b/api/posts/posts-router.js index 2e49f7fc9..001f44480 100755 --- a/api/posts/posts-router.js +++ b/api/posts/posts-router.js @@ -13,8 +13,14 @@ server.get("/", async (req, res) => { } }); -server.get(`/:id`, (req, res) => { - res.status(200).send(`GET response /:id`); +server.get(`/:id`, async (req, res) => { + try { + const id = req.params.id; + const post = await model.findById(id) + res.status(200).send(post); + } catch (err) { + res.status(500).send({error: err}) + } }); server.post("/", (req, res) => { From cd2fbf0c5654716fa2f4514094c22d0c5b522e56 Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 31 Oct 2021 19:10:55 -0600 Subject: [PATCH 06/11] create new post --- api/posts/posts-router.js | 43 +++++++++++++++++++++++++++++++------- data/database.db3 | Bin 24576 -> 24576 bytes 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/api/posts/posts-router.js b/api/posts/posts-router.js index 001f44480..58944551e 100755 --- a/api/posts/posts-router.js +++ b/api/posts/posts-router.js @@ -2,29 +2,48 @@ const express = require("express"); const server = express(); +server.use(express.json()); const model = require("./posts-model"); server.get("/", async (req, res) => { try { const posts = await model.find(); res.status(200).send(posts); - } catch (err) { - res.status(500).send({ error: err }); + } catch (e) { + res + .status(500) + .send({ message: "The posts information could not be retrieved" }); } }); server.get(`/:id`, async (req, res) => { try { const id = req.params.id; - const post = await model.findById(id) + const post = await model.findById(id); res.status(200).send(post); - } catch (err) { - res.status(500).send({error: err}) + } catch (e) { + res + .status(500) + .send({ message: "The post with the specified ID does not exist" }); } }); -server.post("/", (req, res) => { - res.status(201).send(`POST response `); +server.post("/", async (req, res) => { + if (!req.body.title || !req.body.contents) { + res + .status(400) + .send({ message: "Please provide title and contents for the post" }); + } else { + const post = req.body; + try { + model.insert(post); + res.status(201).send(post) + } catch (err) { + res.status(500).send({ + message: "There was an error while saving the post to the database", + }); + } + } }); server.put(`/:id`, (req, res) => { @@ -32,7 +51,15 @@ server.put(`/:id`, (req, res) => { }); server.delete(`/:id`, (req, res) => { - res.status(200).send(`DELETE response /:id`); + const id = req.params.id; + try { + model.remove(id); + res.status(200).send('record deleted'); + } catch (e) { + res + .status(500) + .send({ message: "The post could not be removed" }); + } }); server.get(`/:id/comments`, (req, res) => { diff --git a/data/database.db3 b/data/database.db3 index b8cda47ca7814c6b9bfce690d8a9298d83e7d490..b2315b18bfd0c43aa98160ae7c68ca31bb29cddb 100755 GIT binary patch delta 1031 zcmZoTz}Rqrae}mlIfx=i`ly$2seZxY!tCJ&ldSQx%dE^VCZeic9hf6f#naQgswcGBS%5 zfG8=kL?Jo9G_RznQqe6nu}C2?FGay8KM^ROm#&bRr{I%VtPqx(o>**TU}UIkXsByo zs9<1dWoTe!WP(MgQGk=3p;6b^*w}M&l2?WTOud1nm9a6Zda%&sS6;b<6_tC}5mqGX zlSf$5VxMfniu8QH5?18wH8|*C9G&-oF8FD|Kkb?E1D1=Ku{3? Ds%-DU delta 901 zcmZoTz}Rqrae}lU2Ll5G8xX?)%S0VxMvjdM_VSEOlNZSAvCRuyJza-!@)dav79ex# zCWVXq(wxFf%-W3Ed8rlgxtZxji6xo&dBsfPjLfE-lPBlIh{#ztGN$>Cnb3I@7H1`39zRz?<9CZD From f99310913606b612edfdffdbe1df2ffcd35b243a Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 31 Oct 2021 19:39:43 -0600 Subject: [PATCH 07/11] build(Task 3): POST Create new post with error handling --- api/posts/posts-router.js | 89 +++++++++++++++++++++++++------------- data/database.db3 | Bin 24576 -> 24576 bytes 2 files changed, 59 insertions(+), 30 deletions(-) diff --git a/api/posts/posts-router.js b/api/posts/posts-router.js index 58944551e..09ef07208 100755 --- a/api/posts/posts-router.js +++ b/api/posts/posts-router.js @@ -5,30 +5,57 @@ const server = express(); server.use(express.json()); const model = require("./posts-model"); -server.get("/", async (req, res) => { - try { - const posts = await model.find(); - res.status(200).send(posts); - } catch (e) { - res - .status(500) - .send({ message: "The posts information could not be retrieved" }); - } +server.get("/", (req, res) => { + model + .find() + .then((posts) => res.send(posts)) + .catch(() => { + res + .status(500) + .send({ message: "The posts information could not be retrieved" }); + }); }); -server.get(`/:id`, async (req, res) => { - try { - const id = req.params.id; - const post = await model.findById(id); - res.status(200).send(post); - } catch (e) { +server.get(`/:id`, (req, res) => { + const id = req.params.id; + model + .findById(id) + .then((post) => { + if (post) { + res.status(200).send(post); + } else { + res + .status(400) + .send({ message: "The post with the specified ID does not exist" }); + } + }) + .catch(() => { + res + .status(500) + .send({ message: "The post information could not be retrieved" }); + }); +}); + +server.post("/", async (req, res) => { + const post = req.body; + if (!post.title || !post.contents) { res - .status(500) - .send({ message: "The post with the specified ID does not exist" }); + .status(400) + .send({ message: "Please provide title and contents for the post" }); + } else { + model + .insert(post) + .then((newPost) => res.status(201).send(newPost)) + .catch(() => { + res.status(500).send({ + message: "There was an error while saving the post to the database", + }); + }); } }); -server.post("/", async (req, res) => { +server.put(`/:id`, (req, res) => { + const id = req.params.id; if (!req.body.title || !req.body.contents) { res .status(400) @@ -36,34 +63,36 @@ server.post("/", async (req, res) => { } else { const post = req.body; try { - model.insert(post); - res.status(201).send(post) + model.update(id, post); + res.status(200).send(post); } catch (err) { res.status(500).send({ - message: "There was an error while saving the post to the database", + message: { message: "The post information could not be modified" }, }); } } }); -server.put(`/:id`, (req, res) => { - res.status(200).send(`PUT response /:id`); -}); - server.delete(`/:id`, (req, res) => { const id = req.params.id; try { model.remove(id); - res.status(200).send('record deleted'); + res.status(200).send("record deleted"); } catch (e) { - res - .status(500) - .send({ message: "The post could not be removed" }); + res.status(500).send({ message: "The post could not be removed" }); } }); server.get(`/:id/comments`, (req, res) => { - res.status(200).send(`GET response /:id/comments`); + const id = req.params.id; + try { + const comments = model.findPostComments(id); + res.status(200).send(comments); + } catch (e) { + res + .status(500) + .send({ message: "The comments information could not be retrieved" }); + } }); module.exports = server; diff --git a/data/database.db3 b/data/database.db3 index b2315b18bfd0c43aa98160ae7c68ca31bb29cddb..7ab6c17256bf497c8f9454db7646dbea089b0d1c 100755 GIT binary patch delta 708 zcmZoTz}Rqrae}m-O%C^}21%NjVMv;o zO@8H7id(YWyA8Lbs81Pg$;Cd!xFz*`|KgT(_M3}a@`qmT&&MrU7BdsKq-O%C^}mN2liGB!q) z1Pe`mx8(ll`M4#^VrJr&RF6%?Ex9DN0=J||oGWh0iE&}L QCI81&;+C8cAAwU605cPy!T Date: Sun, 31 Oct 2021 20:30:25 -0600 Subject: [PATCH 08/11] Adds error handling, refactors --- api/posts/posts-router.js | 72 ++++++++++++++++++++++---------------- data/database.db3 | Bin 24576 -> 24576 bytes 2 files changed, 41 insertions(+), 31 deletions(-) diff --git a/api/posts/posts-router.js b/api/posts/posts-router.js index 09ef07208..70a9f855b 100755 --- a/api/posts/posts-router.js +++ b/api/posts/posts-router.js @@ -21,13 +21,11 @@ server.get(`/:id`, (req, res) => { model .findById(id) .then((post) => { - if (post) { - res.status(200).send(post); - } else { - res - .status(400) - .send({ message: "The post with the specified ID does not exist" }); - } + return post === undefined || post === null + ? res.status(200).send(post) + : res + .status(400) + .send({ message: "The post with the specified ID does not exist" }); }) .catch(() => { res @@ -36,7 +34,7 @@ server.get(`/:id`, (req, res) => { }); }); -server.post("/", async (req, res) => { +server.post("/", (req, res) => { const post = req.body; if (!post.title || !post.contents) { res @@ -56,43 +54,55 @@ server.post("/", async (req, res) => { server.put(`/:id`, (req, res) => { const id = req.params.id; - if (!req.body.title || !req.body.contents) { + const post = req.body; + if (!post.title || !post.contents) { res .status(400) .send({ message: "Please provide title and contents for the post" }); } else { - const post = req.body; - try { - model.update(id, post); - res.status(200).send(post); - } catch (err) { - res.status(500).send({ - message: { message: "The post information could not be modified" }, + model + .update(id, post) + .then((updatedPost) => { + return updatedPost === null || updatedPost === undefined + ? res.status(400).send({ + message: "The post with the specified ID does not exist", + }) + : res.status(200).send(updatedPost); + }) + .catch(() => { + res + .sendStatus(500) + .send({ message: "The post information could not be modified" }); }); - } } }); server.delete(`/:id`, (req, res) => { const id = req.params.id; - try { - model.remove(id); - res.status(200).send("record deleted"); - } catch (e) { - res.status(500).send({ message: "The post could not be removed" }); - } + model + .remove(id) + .then((removedPost) => { + return removedPost === undefined || removedPost === null + ? res + .status(400) + .send({ message: "The post with the specified ID does not exist" }) + : res.status(200).send(removedPost); + }) + .catch(() => { + res.status(500).send({ message: "The post could not be removed" }); + }); }); server.get(`/:id/comments`, (req, res) => { const id = req.params.id; - try { - const comments = model.findPostComments(id); - res.status(200).send(comments); - } catch (e) { - res - .status(500) - .send({ message: "The comments information could not be retrieved" }); - } + model + .findPostComments(id) + .then((data) => res.status(200).send(data)) + .catch(() => { + res + .status(500) + .send({ message: "The comments information could not be retrieved" }); + }); }); module.exports = server; diff --git a/data/database.db3 b/data/database.db3 index 7ab6c17256bf497c8f9454db7646dbea089b0d1c..006ccdbb6e84f7227b6c72be19c2b4299dfa14af 100755 GIT binary patch delta 174 zcmZoTz}Rqrae_3X@V}^su}pp_U|psYR&@i9lSEkzbsukXD+Uotc-eke;8Drcj)bpISUw$jg-l ks9a@ow3mWbE+-oU(fSM~`G{?P?WM&C(%-jP(&xD_04t|9VgLXD delta 190 zcmZoTz}Rqrae_3X>_i!7M%j%C3+<&D7#O%XA2aZm@%`X)=GEg_%p=NO&h?5bob&O< z#^ap&MOsX%3^3PqWD=?a;7V0K1gUP`e-ewspJo++1NKr`aBl~0M?#7xBvhE From e039b99198904576768eaf824b99c79a29bcd92f Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 31 Oct 2021 21:09:58 -0600 Subject: [PATCH 09/11] fix(GET): by id corrects return --- api/posts/posts-router.js | 14 ++++---------- data/database.db3 | Bin 24576 -> 24576 bytes 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/api/posts/posts-router.js b/api/posts/posts-router.js index 70a9f855b..a86ccb88d 100755 --- a/api/posts/posts-router.js +++ b/api/posts/posts-router.js @@ -22,10 +22,10 @@ server.get(`/:id`, (req, res) => { .findById(id) .then((post) => { return post === undefined || post === null - ? res.status(200).send(post) - : res + ? res .status(400) - .send({ message: "The post with the specified ID does not exist" }); + .send({ message: "The post with the specified ID does not exist" }) + : res.status(200).send(post); }) .catch(() => { res @@ -62,13 +62,7 @@ server.put(`/:id`, (req, res) => { } else { model .update(id, post) - .then((updatedPost) => { - return updatedPost === null || updatedPost === undefined - ? res.status(400).send({ - message: "The post with the specified ID does not exist", - }) - : res.status(200).send(updatedPost); - }) + .then((updatedPost) => res.status(200).send(updatedPost)) .catch(() => { res .sendStatus(500) diff --git a/data/database.db3 b/data/database.db3 index 006ccdbb6e84f7227b6c72be19c2b4299dfa14af..892c4ddc73b168711e9a78d9e51d1e002845fb26 100755 GIT binary patch delta 164 zcmZoTz}Rqrae_3X%0wAwMwN{Th5C%#n=k1b2}p2qRWtCH@%`X)=GEg_%w5j)imRGO zpYz4W##5Y|pLrTFxk)iJDjORcJLcplROXi|WF(fQDwO0a6mhdL#CjSVho>qeC+4Y_ zC={3E7bs+;7NzPalw@QUD*#baVu?a>eraAwQRU>NUfSYDR;CtKCT2zkMuxhEhPnoZ N3I-sd%?o@IgaIjKF|Ggr delta 151 zcmZoTz}Rqrae_3X@T`R+|_5#0moda*8uN From 828124b477d07985d6ce2b9feaf12044f70118af Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 31 Oct 2021 21:24:59 -0600 Subject: [PATCH 10/11] Error handling fixes --- api/posts/posts-router.js | 16 +++++++++++++--- data/database.db3 | Bin 24576 -> 24576 bytes 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/api/posts/posts-router.js b/api/posts/posts-router.js index a86ccb88d..687022d55 100755 --- a/api/posts/posts-router.js +++ b/api/posts/posts-router.js @@ -43,7 +43,7 @@ server.post("/", (req, res) => { } else { model .insert(post) - .then((newPost) => res.status(201).send(newPost)) + .then(() => res.status(201).send(post)) .catch(() => { res.status(500).send({ message: "There was an error while saving the post to the database", @@ -62,7 +62,15 @@ server.put(`/:id`, (req, res) => { } else { model .update(id, post) - .then((updatedPost) => res.status(200).send(updatedPost)) + .then((updatedPost) => { + return updatedPost === undefined || + updatedPost === null || + updatedPost === 0 + ? res.status(400).send({ + message: "The post with the specified ID does not exist", + }) + : res.status(200).send(post); + }) .catch(() => { res .sendStatus(500) @@ -76,7 +84,9 @@ server.delete(`/:id`, (req, res) => { model .remove(id) .then((removedPost) => { - return removedPost === undefined || removedPost === null + return removedPost === undefined || + removedPost === null || + removedPost === 0 ? res .status(400) .send({ message: "The post with the specified ID does not exist" }) diff --git a/data/database.db3 b/data/database.db3 index 892c4ddc73b168711e9a78d9e51d1e002845fb26..9be33921e02cb4e419e21a82a20f475bf24c3222 100755 GIT binary patch delta 985 zcmZoTz}Rqrae}m<3j+fK8xX^Q#6%rqMwg8V_VSE8lNZSAvo`Wh)Zw0dMP8G+k+*-7 z!bN^*E@38SZN}`p)Qb4r%=DtflFae0|6Zk|n888Y+1C8V2yu-j>#`lBI znOBczF^?#BIoB($aLzj$8xL^GR&ud1WP2JL2jrwC7N_bcl%(e5DCDLpBqrsTmQ3#P za*;E(GPJNVG&C|WGSoFR)HN_vFn|g*3UIPdj`mV8OI0YzNL47x%u83u%mcGC67y1u z74p**67v*NbJ7$Q{8GzOixf(VN{dTiVw3m#$xDKbGBCq1-C*)duM#}6W!|mzIQ5z} za delta 938 zcmZoTz}Rqrae}m<3IhWJ8xX?)&qN(#MwN{T_VSEulNZSAv#J_x(_x)_MP8Fx)o9Bm zg^T>s+`>%E+KkzGsTJ|LndwD|C7Jno#cbk?%%+@^C-8}EGGG*t<`HG!-iFXQ{c z=gh0evzWV_>lIfuk3Q#%jg6-`g-c?A7ETWKG&T;;NG(cLNGwX7{L|A#&d|!(+{)D4 z$iT=@*U(Vcz)-;eDg;!oGCA5yK`@t-jR8ZWBv_S+8HPra$uGT1@W_^Vx7Op-YX-Db zilI^2*x1-HCr6<&zf>V3u`E@gBwwM3n~fnB z5TVJ7e2Vb6U)T2!9$6>9Ie28h`=#QME%h(NExY-@{|8Ro(vvx&R^X968D)z{RzA87 xkL Date: Sun, 31 Oct 2021 21:44:40 -0600 Subject: [PATCH 11/11] WIP: DELETE error handling --- api/posts/posts-router.js | 2 +- data/database.db3 | Bin 24576 -> 24576 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/api/posts/posts-router.js b/api/posts/posts-router.js index 687022d55..a32a333e6 100755 --- a/api/posts/posts-router.js +++ b/api/posts/posts-router.js @@ -90,7 +90,7 @@ server.delete(`/:id`, (req, res) => { ? res .status(400) .send({ message: "The post with the specified ID does not exist" }) - : res.status(200).send(removedPost); + : res.status(200).send("Post removed"); }) .catch(() => { res.status(500).send({ message: "The post could not be removed" }); diff --git a/data/database.db3 b/data/database.db3 index 9be33921e02cb4e419e21a82a20f475bf24c3222..9e2bf4007aca8d5d1b34318974f07dd8af910b18 100755 GIT binary patch delta 822 zcmZoTz}Rqrae}m90s{jB8xX^Q!bBZo#)ORt_VSDZlNZSAvv#MQ(&3+cMP8G+JMH8q zg=hS10^*F!rks-}@QG|PU=)z%5oKWJdd0x^gS(vT6%q{RytA?KFehX67Aza+QCc1uoa~@{}>KajG!z zP2}Fst-y7Pi<46Y8E$N3;hd}zc^0?zoKY)rOP-3d!!4;0-HuywfAoBuzT*4OBt5w* zW-4yo>anRfbpu26?c^1)CHNG?PPT}1#BKblIfx=bep>2RKg>o#I$pX}~86SwXkerdRMvoo?! zuJX^bz~y>gV9@e#sxa_R;QP-vk->Dnz&AmfRmbAGfdc*nz%^nTlJtdTc6g-Mql~SP@%-Q$aKfFg01kIpQ{c eVq6$b-Hm)q?30<}OK~d5V`OKTJS9E^r||$dk+}T;