From c21089f4e611983e42218af879e11fdfca221038 Mon Sep 17 00:00:00 2001 From: Kevin Bloch Date: Tue, 8 Sep 2020 15:30:06 +0200 Subject: [PATCH 1/9] Ignore yarn.lock for yarn users --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1a56f43..b720e77 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .idea **/node_modules data +yarn.lock From 730f24388edb1f90337dadbe6e3c7b58f37f1037 Mon Sep 17 00:00:00 2001 From: Kevin Bloch Date: Tue, 8 Sep 2020 15:30:23 +0200 Subject: [PATCH 2/9] Fix for hosts not already named 'mongo' --- common/services/mongoose.service.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/services/mongoose.service.js b/common/services/mongoose.service.js index 0e1a83f..5a7e333 100644 --- a/common/services/mongoose.service.js +++ b/common/services/mongoose.service.js @@ -15,7 +15,7 @@ const options = { }; const connectWithRetry = () => { console.log('MongoDB connection with retry') - mongoose.connect("mongodb://mongo:27017/rest-tutorial", options).then(()=>{ + mongoose.connect("mongodb://localhost:27017/rest-tutorial", options).then(()=>{ console.log('MongoDB is connected') }).catch(err=>{ console.log('MongoDB connection unsuccessful, retry after 5 seconds. ', ++count); From ba0450f81805b67058feccec0737f89c85ac6983 Mon Sep 17 00:00:00 2001 From: Kevin Bloch Date: Tue, 8 Sep 2020 15:35:12 +0200 Subject: [PATCH 3/9] Get rid of even newer deprecation errors. --- common/services/mongoose.service.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/common/services/mongoose.service.js b/common/services/mongoose.service.js index 5a7e333..63cd14a 100644 --- a/common/services/mongoose.service.js +++ b/common/services/mongoose.service.js @@ -3,12 +3,10 @@ let count = 0; const options = { autoIndex: false, // Don't build indexes - reconnectTries: 30, // Retry up to 30 times - reconnectInterval: 500, // Reconnect every 500ms poolSize: 10, // Maintain up to 10 socket connections // If not connected, return errors immediately rather than waiting for reconnect bufferMaxEntries: 0, - //geting rid off the depreciation errors + // all other approaches are now deprecated by MongoDB: useNewUrlParser: true, useUnifiedTopology: true From de9c34e87406ee388a7f9e40149ad59aee399773 Mon Sep 17 00:00:00 2001 From: Kevin Bloch Date: Wed, 9 Sep 2020 14:35:53 +0200 Subject: [PATCH 4/9] Fix Express deprecation warning --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 6996155..17f867a 100644 --- a/index.js +++ b/index.js @@ -14,7 +14,7 @@ app.use(function (req, res, next) { res.header('Access-Control-Expose-Headers', 'Content-Length'); res.header('Access-Control-Allow-Headers', 'Accept, Authorization, Content-Type, X-Requested-With, Range'); if (req.method === 'OPTIONS') { - return res.send(200); + return res.sendStatus(200); } else { return next(); } From c269dcd8d07942178ed7c27749d2523737db45e1 Mon Sep 17 00:00:00 2001 From: Kevin Bloch Date: Wed, 9 Sep 2020 14:39:59 +0200 Subject: [PATCH 5/9] Fix Node.js deprecation warnings --- authorization/controllers/authorization.controller.js | 2 +- common/middlewares/auth.validation.middleware.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/authorization/controllers/authorization.controller.js b/authorization/controllers/authorization.controller.js index e2e935d..618ceaf 100644 --- a/authorization/controllers/authorization.controller.js +++ b/authorization/controllers/authorization.controller.js @@ -10,7 +10,7 @@ exports.login = (req, res) => { let hash = crypto.createHmac('sha512', salt).update(refreshId).digest("base64"); req.body.refreshKey = salt; let token = jwt.sign(req.body, jwtSecret); - let b = new Buffer(hash); + let b = Buffer.from(hash); let refresh_token = b.toString('base64'); res.status(201).send({accessToken: token, refreshToken: refresh_token}); } catch (err) { diff --git a/common/middlewares/auth.validation.middleware.js b/common/middlewares/auth.validation.middleware.js index 8d7ae8f..147a550 100644 --- a/common/middlewares/auth.validation.middleware.js +++ b/common/middlewares/auth.validation.middleware.js @@ -11,7 +11,7 @@ exports.verifyRefreshBodyField = (req, res, next) => { }; exports.validRefreshNeeded = (req, res, next) => { - let b = new Buffer(req.body.refresh_token, 'base64'); + let b = Buffer.from(req.body.refresh_token, 'base64'); let refresh_token = b.toString(); let hash = crypto.createHmac('sha512', req.jwt.refreshKey).update(req.jwt.userId + secret).digest("base64"); if (hash === refresh_token) { From e6dca235487a66b51b01b272384de648f0e542f5 Mon Sep 17 00:00:00 2001 From: Kevin Bloch Date: Wed, 9 Sep 2020 15:08:27 +0200 Subject: [PATCH 6/9] Fix Mongoose deprecation warning --- users/models/users.model.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/users/models/users.model.js b/users/models/users.model.js index 0f3a5e3..f715e28 100644 --- a/users/models/users.model.js +++ b/users/models/users.model.js @@ -76,7 +76,7 @@ exports.patchUser = (id, userData) => { exports.removeById = (userId) => { return new Promise((resolve, reject) => { - User.remove({_id: userId}, (err) => { + User.deleteMany({_id: userId}, (err) => { if (err) { reject(err); } else { From 0261fd24faff540d11237cfe8ad316b7e1bdce17 Mon Sep 17 00:00:00 2001 From: Kevin Bloch Date: Wed, 9 Sep 2020 15:17:16 +0200 Subject: [PATCH 7/9] Update Mongoose & UUID, remove unused dependencies --- package.json | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 5e8c178..2c8088b 100644 --- a/package.json +++ b/package.json @@ -21,11 +21,7 @@ "body-parser": "1.19.0", "express": "^4.17.1", "jsonwebtoken": "^8.5.1", - "moment": "^2.24.0", - "moment-timezone": "^0.5.27", - "mongoose": "^5.7.9", - "uuid": "^3.3.3", - "swagger-ui-express": "^4.1.2", - "sync-request": "^6.1.0" + "mongoose": "^5.10.3", + "uuid": "^8.3.0" } } From d212c8f5bf8a332f8c2cfbe074667affd3fcec3c Mon Sep 17 00:00:00 2001 From: Kevin Bloch Date: Wed, 9 Sep 2020 15:38:38 +0200 Subject: [PATCH 8/9] Leverage built-in method. --- users/models/users.model.js | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/users/models/users.model.js b/users/models/users.model.js index f715e28..553aaf2 100644 --- a/users/models/users.model.js +++ b/users/models/users.model.js @@ -59,19 +59,9 @@ exports.list = (perPage, page) => { }; exports.patchUser = (id, userData) => { - return new Promise((resolve, reject) => { - User.findById(id, function (err, user) { - if (err) reject(err); - for (let i in userData) { - user[i] = userData[i]; - } - user.save(function (err, updatedUser) { - if (err) return reject(err); - resolve(updatedUser); - }); - }); - }) - + return User.findOneAndUpdate({ + _id: id + }, userData); }; exports.removeById = (userId) => { From 2fdb3247d4d529573cb3b562d43ca3c43844f997 Mon Sep 17 00:00:00 2001 From: Kevin Bloch Date: Wed, 9 Sep 2020 15:39:00 +0200 Subject: [PATCH 9/9] Update README.md itemizing recent changes. --- README.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 49b2e56..20a4445 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,19 @@ # REST API Tutorial -This sample is published as part of the blog article at www.toptal.com/blog: - -- https://www.toptal.com/nodejs/secure-rest-api-in-nodejs - -Visit www.toptal.com/blog and subscribe to our newsletter to read great posts +This sample is published as part of [the corresponding article](https://www.toptal.com/nodejs/secure-rest-api-in-nodejs) at the Toptal Engineering Blog. Visit https://www.toptal.com/developers/blog and subscribe to our newsletter to read great posts! ## Before using - Please make sure that you have: - - node.js installed (https://nodejs.org/) - - have mongodb installed and running locally (https://www.mongodb.com/) + - Node.js installed (https://nodejs.org/) + - MongoDB installed and running locally (https://www.mongodb.com/) - Using Windows, just open the terminal at where you installed mongo and run `mongod.exe` - - run npm install in your root project folder + - Run `npm install` or `yarn` in your root project folder + ## Usage To run the project, please use a command line the following: - - npm start + - `npm start` - It will run the server at port 3600. @@ -35,3 +32,11 @@ If you are familiar to docker and you have docker installed on your machine and ### 2020-02-01 I've created a 2020 version of this project using Typescript. If you might be interested on it, please check the following repository: https://github.com/makinhs/expressjs-api-tutorial + +### 2020-09-09 + +- Updated and pruned dependencies. +- Fixed deprecation warnings. +- Leveraged `findOneAndUpdate` to simplify PATCH code. +- Changed default MongoDB server name to `localhost` to simplify first-time setup. +- Checked that it works with the latest version of Node.js, 14.9.0. \ No newline at end of file pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy