First commit

This commit is contained in:
2018-05-31 12:39:05 -04:00
commit fb65ff28f2
8 changed files with 4053 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
node_modules/

6
README.md Normal file
View File

@@ -0,0 +1,6 @@
#ProductsAPI
ProductsAPI is an RestFull API base for my projects.
##Prerequisites
*NodeJs, ExpressJs, Gulp and MongoDB.*

84
Routes/productRoutes.js Normal file
View File

@@ -0,0 +1,84 @@
var express = require('express');
var routes = function (Product) {
var productRouter = express.Router();
productRouter.route('/Products')
.post(function (req, res) {
var product = new Product(req.body);
product.save();
res.status(201).send(product);
})
.get(function (req, res) {
Product.find(function (err, products) {
if (err) res.status(500).send(err);
else res.json(products);
});
});
// Middleware
productRouter.use('/Products/:productId', function (req, res, next) {
Product.findById(req.params.productId, function (err, product) {
if (err) res.status(500).send(err);
else if (product) {
req.product = product;
next();
} else {
res.status(404).send('product not found!!');
}
});
});
productRouter.route('/Products/:productId')
.get(function (req, res) {
res.json(req.product);
})
.put(function (req, res) {
req.product.productName = req.body.productName;
req.product.productCode = req.body.productCode;
req.product.category = req.body.category;
req.product.brand = req.body.brand;
req.product.sku = req.body.sku;
req.product.resolution = req.body.resolution;
req.product.type = req.body.type;
req.product.technology = req.body.technology;
req.product.series = req.body.series;
req.product.description = req.body.description;
req.product.price = req.body.price;
req.product.discount = req.body.discount;
req.product.imageUrl = req.body.imageUrl;
req.product.save(function (err) {
if (err)
res.status(500).send(err);
else {
res.json(req.product);
}
});
})
.patch(function (req, res) {
if (req.body._id) {
delete req.body._id;
}
for (var key in req.body) {
req.product[key] = req.body[key];
}
req.product.save(function (err) {
if (err)
res.status(500).send(err);
else {
res.json(req.product);
}
});
})
.delete(function (req, res) {
req.product.remove(function (err) {
if (err)
res.status(500).send(err);
else {
res.status(204).send('REMOVED PRODUCT');
}
});
});
return productRouter;
};
module.exports = routes;

16
gulpfile.js Normal file
View File

@@ -0,0 +1,16 @@
var gulp = require('gulp');
var nodemon = require('gulp-nodemon');
gulp.task('default', function () {
nodemon({
script: 'server.js',
ext: 'js',
env: {
PORT: 8000
},
ignore: ['./node_modules/**']
})
.on('restart', function () {
console.log('Restarting..');
});
});

20
models/productModel.js Normal file
View File

@@ -0,0 +1,20 @@
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var productModel = new Schema({
productName: String,
productCode: String,
category: String,
brand: String,
sku: String,
resolution: String,
type: String,
technology: String,
series: String,
description: String,
price: Number,
discount: String,
imageUrl: String
});
module.exports = mongoose.model('Product', productModel);

3872
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

22
package.json Normal file
View File

@@ -0,0 +1,22 @@
{
"name": "productsapi",
"version": "1.0.0",
"description": "Node + Express + MongoDB API",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"RestAPI",
"MEAN"
],
"author": "Raghu-ch",
"license": "ISC",
"dependencies": {
"body-parser": "^1.18.3",
"express": "^4.16.3",
"gulp": "^3.9.1",
"gulp-nodemon": "^2.2.1",
"mongoose": "^5.1.3"
}
}

32
server.js Normal file
View File

@@ -0,0 +1,32 @@
var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var db = mongoose.connect('mongodb://Alien:SafePass7@ds141320.mlab.com:41320/rapidcrocs');
var Product = require('./models/productModel');
var app = express();
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
var port = process.env.PORT || 3000;
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
productRouter = require('./Routes/productRoutes')(Product);
app.use('/api', productRouter);
app.get('/', function (req, res) {
res.send('Welcome to my API! MAGIC HAPPENS HERE!!');
});
app.listen(port, function () {
console.log('Gulp is running on PORT:' + port);
});