From a91a7883ab4582647a23d875d672139f9fba02b6 Mon Sep 17 00:00:00 2001 From: chidubem100 Date: Thu, 26 Jan 2023 23:15:32 +0100 Subject: [PATCH 1/2] new: added new codes --- errors/customError.js | 9 +++++++++ middlewares/errorHandler.js | 30 +++++++++++++++++++++++++++--- models/favourite.js | 4 ++-- models/likes.js | 4 ++-- models/paystack.js | 4 ++-- models/user.js | 4 ++-- routes/admin.js | 21 ++++++++++++--------- routes/index.js | 12 ++++++------ server.js | 8 +++++++- utils/catchAsync.js | 5 ----- 10 files changed, 69 insertions(+), 32 deletions(-) create mode 100644 errors/customError.js diff --git a/errors/customError.js b/errors/customError.js new file mode 100644 index 0000000..3182bc2 --- /dev/null +++ b/errors/customError.js @@ -0,0 +1,9 @@ + +class CustomApiError extends Error { + constructor (message) { + super (message) + } +} + + +module.exports = CustomApiError; \ No newline at end of file diff --git a/middlewares/errorHandler.js b/middlewares/errorHandler.js index ffb3086..ce0f651 100644 --- a/middlewares/errorHandler.js +++ b/middlewares/errorHandler.js @@ -1,7 +1,31 @@ + + const errorHandler = (err,req,res,next) =>{ - return res.status(500).json({ - message:'Internal server error' - }); + let CustomError = { + statusCode :err.statusCode || 500, + msg: err.message || 'something went wrong, Please try again' + } + + // check and handle validation error + if(err.name === 'validation error'){ + CustomError.msg = Object.values(err.errors).map((item) => item.message.join(',')); + CustomError.statusCode = 400; + } + + // check for duplicate values amd handle the error + if(err.code && err.code === 11000){ + CustomError.msg = `Duplicate value entered for ${Object.keys(err.KeyValue)} field, Please chose another value`; + CustomError.statusCode = 400; + } + + // check for cast errors or searchs with wrong id and handle the error + if(err.name === 'CastError'){ + CustomError.msg = `No item with such id`; + CustomError.statusCode = 400; + } + + return res.status(CustomError.statusCode).json({msg: CustomError.msg}); + } diff --git a/models/favourite.js b/models/favourite.js index 6fc1387..2e52b57 100644 --- a/models/favourite.js +++ b/models/favourite.js @@ -13,5 +13,5 @@ const favouriteSchema = new Schema({ }); favouriteSchema.index({ user: 1, favourite: 1 }, { unique: true }); -const favourite = mongoose.model("favourite", favouriteSchema); -module.exports = favourite; \ No newline at end of file +// const favourite = mongoose.model("favourite", favouriteSchema); +module.exports = mongoose.model("favourite", favouriteSchema); \ No newline at end of file diff --git a/models/likes.js b/models/likes.js index 8312fb9..25cbc0d 100644 --- a/models/likes.js +++ b/models/likes.js @@ -13,5 +13,5 @@ const likesSchema = new Schema({ }, { timestamps: true }); likesSchema.index({ user: 1, like: 1 }, { unique: true }); -const ProductLike = mongoose.model("ProductLike", likesSchema); -module.exports = ProductLike; \ No newline at end of file +// const ProductLike = mongoose.model("ProductLike", likesSchema); +module.exports = mongoose.model("ProductLike", likesSchema); \ No newline at end of file diff --git a/models/paystack.js b/models/paystack.js index aa8a821..df5c6a9 100644 --- a/models/paystack.js +++ b/models/paystack.js @@ -26,5 +26,5 @@ const paystackSchema = new Schema({ } }) -const Paystack = mongoose.model("Paystack", paystackSchema); -module.exports = Paystack; \ No newline at end of file +// const Paystack = mongoose.model("Paystack", paystackSchema); +module.exports = mongoose.modele("Paystack", paystackSchema); // shorter codes like this runs faster. \ No newline at end of file diff --git a/models/user.js b/models/user.js index ee8d4a8..9ebbcdc 100644 --- a/models/user.js +++ b/models/user.js @@ -32,5 +32,5 @@ const userSchema = new Schema({ } }) -const User = mongoose.model("User", userSchema); -module.exports = User; \ No newline at end of file +// const User = mongoose.model("User", userSchema); +module.exports = mongoose.model("User", userSchema); \ No newline at end of file diff --git a/routes/admin.js b/routes/admin.js index 3f0e378..b48aba5 100644 --- a/routes/admin.js +++ b/routes/admin.js @@ -1,18 +1,21 @@ const express = require("express"); const router = express.Router(); -const { adminSignup, - adminSignIn, - changeAdminPassword, - getHeaderToken, - checkIfLoggedIn, - grantAccess, - editAdmin, +const { + adminSignup, + adminSignIn, + changeAdminPassword, + getHeaderToken, + checkIfLoggedIn, + grantAccess, + editAdmin, } = require("../controllers/auth.controller"); const path = require("path"); const Admin = require("../models/admin"); -const uploadPath = path.join('public', Admin.adminPhotoBasePath) +const uploadPath = path.join('public', Admin.adminPhotoBasePath); const imageMimeTypes = ["image/jpeg", "image/png", "image/gif"] -const multer = require('multer') +const multer = require('multer'); + + const upload = multer({ dest: uploadPath, fileFilter: (req, file, callback) => { diff --git a/routes/index.js b/routes/index.js index 8228776..be15921 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,8 +1,8 @@ -const express = require("express"); -const router = express.Router(); +// const express = require("express"); +// const router = express.Router(); -router.get("/", (req, res) => { - res.send("Landing page"); -}) +// router.get("/", (req, res) => { +// res.send("Landing page"); +// }) -module.exports = router; \ No newline at end of file +// module.exports = router; \ No newline at end of file diff --git a/server.js b/server.js index b418bed..8b52fc3 100644 --- a/server.js +++ b/server.js @@ -1,4 +1,5 @@ require('dotenv').config(); + const express = require("express"); const app = express(); const { connectDB } = require("./config/database"); @@ -19,7 +20,7 @@ app.use(express.urlencoded({ extended: true })); app.use(bodyParser.urlencoded({ extended: true })); app.use(cors()); -app.use("/api/v1/", indexRouter); +// app.use("/api/v1/", indexRouter); app.use("/api/v1/auth/admin", adminRouter); app.use("/api/v1/users", userRouter); app.use("/api/v1/auth", authRouter); @@ -28,6 +29,11 @@ app.use("/api/v1/paystack", paystackRouter); app.use(NotFound); app.use(errorHandler); + +app.get('/', (req,res) =>{ + res.send('

Shooping site API

Documentation') +}); + const port = process.env.PORT || 3000 const start = async() =>{ try { diff --git a/utils/catchAsync.js b/utils/catchAsync.js index 9a75555..bc35be5 100644 --- a/utils/catchAsync.js +++ b/utils/catchAsync.js @@ -1,8 +1,3 @@ -// export default (fn) => { -// return (req, res, next) => { -// fn(req, res, next).catch(next); -// }; -// }; const asyncWrapper = (fn)=>{ const x = async(req,res,next) =>{ From 8617e5a95a5cb061ff06553b976ce0cf8019c41c Mon Sep 17 00:00:00 2001 From: chidubem100 Date: Sun, 29 Jan 2023 16:48:55 +0100 Subject: [PATCH 2/2] new: resolved --- models/paystack.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/paystack.js b/models/paystack.js index df5c6a9..4cc373f 100644 --- a/models/paystack.js +++ b/models/paystack.js @@ -27,4 +27,4 @@ const paystackSchema = new Schema({ }) // const Paystack = mongoose.model("Paystack", paystackSchema); -module.exports = mongoose.modele("Paystack", paystackSchema); // shorter codes like this runs faster. \ No newline at end of file +module.exports = mongoose.model("Paystack", paystackSchema); // shorter codes like this runs faster. \ No newline at end of file