Skip to content

Commit 1266bec

Browse files
author
Maximilian Schwarzmüller
committed
added mongoose and product database functions
1 parent 5090c0c commit 1266bec

File tree

5 files changed

+118
-34
lines changed

5 files changed

+118
-34
lines changed

api/models/product.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const mongoose = require('mongoose');
2+
3+
const productSchema = mongoose.Schema({
4+
_id: mongoose.Schema.Types.ObjectId,
5+
name: String,
6+
price: Number
7+
});
8+
9+
module.exports = mongoose.model('Product', productSchema);

api/routes/products.js

Lines changed: 90 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,106 @@
1-
const express = require('express');
1+
const express = require("express");
22
const router = express.Router();
3+
const mongoose = require("mongoose");
34

4-
router.get('/', (req, res, next) => {
5-
res.status(200).json({
6-
message: 'Handling GET requests to /products'
5+
const Product = require("../models/product");
6+
7+
router.get("/", (req, res, next) => {
8+
Product.find()
9+
.exec()
10+
.then(docs => {
11+
console.log(docs);
12+
// if (docs.length >= 0) {
13+
res.status(200).json(docs);
14+
// } else {
15+
// res.status(404).json({
16+
// message: 'No entries found'
17+
// });
18+
// }
19+
})
20+
.catch(err => {
21+
console.log(err);
22+
res.status(500).json({
23+
error: err
24+
});
725
});
826
});
927

10-
router.post('/', (req, res, next) => {
11-
const product = {
12-
name: req.body.name,
13-
price: req.body.price
14-
};
15-
res.status(201).json({
16-
message: 'Handling POST requests to /products',
17-
createdProduct: product
28+
router.post("/", (req, res, next) => {
29+
const product = new Product({
30+
_id: new mongoose.Types.ObjectId(),
31+
name: req.body.name,
32+
price: req.body.price
33+
});
34+
product
35+
.save()
36+
.then(result => {
37+
console.log(result);
38+
res.status(201).json({
39+
message: "Handling POST requests to /products",
40+
createdProduct: result
41+
});
42+
})
43+
.catch(err => {
44+
console.log(err);
45+
res.status(500).json({
46+
error: err
47+
});
1848
});
1949
});
2050

21-
router.get('/:productId', (req, res, next) => {
22-
const id = req.params.productId;
23-
if (id === 'special') {
24-
res.status(200).json({
25-
message: 'You discovered the special ID',
26-
id: id
27-
});
28-
} else {
29-
res.status(200).json({
30-
message: 'You passed an ID'
31-
});
32-
}
51+
router.get("/:productId", (req, res, next) => {
52+
const id = req.params.productId;
53+
Product.findById(id)
54+
.exec()
55+
.then(doc => {
56+
console.log("From database", doc);
57+
if (doc) {
58+
res.status(200).json(doc);
59+
} else {
60+
res
61+
.status(404)
62+
.json({ message: "No valid entry found for provided ID" });
63+
}
64+
})
65+
.catch(err => {
66+
console.log(err);
67+
res.status(500).json({ error: err });
68+
});
3369
});
3470

35-
router.patch('/:productId', (req, res, next) => {
36-
res.status(200).json({
37-
message: 'Updated product!'
71+
router.patch("/:productId", (req, res, next) => {
72+
const id = req.params.productId;
73+
const updateOps = {};
74+
for (const ops of req.body) {
75+
updateOps[ops.propName] = ops.value;
76+
}
77+
Product.update({ _id: id }, { $set: updateOps })
78+
.exec()
79+
.then(result => {
80+
console.log(result);
81+
res.status(200).json(result);
82+
})
83+
.catch(err => {
84+
console.log(err);
85+
res.status(500).json({
86+
error: err
87+
});
3888
});
3989
});
4090

41-
router.delete('/:productId', (req, res, next) => {
42-
res.status(200).json({
43-
message: 'Deleted product!'
91+
router.delete("/:productId", (req, res, next) => {
92+
const id = req.params.productId;
93+
Product.remove({ _id: id })
94+
.exec()
95+
.then(result => {
96+
res.status(200).json(result);
97+
})
98+
.catch(err => {
99+
console.log(err);
100+
res.status(500).json({
101+
error: err
102+
});
44103
});
45104
});
46105

47-
module.exports = router;
106+
module.exports = router;

app.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,20 @@ const express = require("express");
22
const app = express();
33
const morgan = require("morgan");
44
const bodyParser = require("body-parser");
5+
const mongoose = require("mongoose");
56

67
const productRoutes = require("./api/routes/products");
78
const orderRoutes = require("./api/routes/orders");
89

10+
mongoose.connect(
11+
"mongodb://node-shop:" +
12+
process.env.MONGO_ATLAS_PW +
13+
"@node-rest-shop-shard-00-00-wovcj.mongodb.net:27017,node-rest-shop-shard-00-01-wovcj.mongodb.net:27017,node-rest-shop-shard-00-02-wovcj.mongodb.net:27017/test?ssl=true&replicaSet=node-rest-shop-shard-0&authSource=admin",
14+
{
15+
useMongoClient: true
16+
}
17+
);
18+
919
app.use(morgan("dev"));
1020
app.use(bodyParser.urlencoded({ extended: false }));
1121
app.use(bodyParser.json());
@@ -16,9 +26,9 @@ app.use((req, res, next) => {
1626
"Access-Control-Allow-Headers",
1727
"Origin, X-Requested-With, Content-Type, Accept, Authorization"
1828
);
19-
if (req.method === 'OPTIONS') {
20-
res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
21-
return res.status(200).json({});
29+
if (req.method === "OPTIONS") {
30+
res.header("Access-Control-Allow-Methods", "PUT, POST, PATCH, DELETE, GET");
31+
return res.status(200).json({});
2232
}
2333
next();
2434
});

nodemon.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"env": {
3+
"MONGO_ATLAS_PW": "node-shop"
4+
}
5+
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"dependencies": {
1818
"body-parser": "^1.18.2",
1919
"express": "^4.16.2",
20+
"mongoose": "^4.13.5",
2021
"morgan": "^1.9.0"
2122
},
2223
"devDependencies": {

0 commit comments

Comments
 (0)