const express = require('express'); const mongoose = require('mongoose'); const app = express(); const cors = require('cors'); app.use(cors(), express.json()); const port = process.env.PORT || 5000; const MONGO_IP_ADDRESS = '192.168.100.102'; mongoose.connect(`mongodb://${MONGO_IP_ADDRESS}/storage`, {useNewUrlParser: true}); const db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function() { console.log(`connected to mongodb: ${MONGO_IP_ADDRESS}`); }); /*------------MODELS------------*/ //create schema var boxSchema = new mongoose.Schema({ id: String, name: String, description: String, item: [mongoose.Schema.Types.Mixed], }); //compile schema into model var Box = mongoose.model('box', boxSchema, 'box'); /*------------/MODELS------------*/ /*------------CONTROLLER------------*/ app.listen(port, () => console.log(`Listening on port ${port}`)); // get all boxes app.get('/box', async (request, response) => { const boxes = await getAllBoxes(); response.send(boxes); }); // create box app.post('/box', async (request, response) => { Box.create(request.body, (error, document) => { if(error) return request.next(error); return document; }); const updatedBoxes = await getAllBoxes(); response.send(updatedBoxes); }); //delete box app.delete('/box/:id', async (request, response) => { await Box.deleteOne({_id: request.params.id}, (error, document) => { if(error)return null; return document; }); const updatedBoxes = await getAllBoxes(); response.send(updatedBoxes); }); //create item app.post('/box/:id/item', async (request, response) => { const id = request.params.id; const query = {_id: id}; const box = Box.updateOne(query,{ $push: { item: request.body } }, (error, document) => { if(error)return null; return document; }); const updatedBox = await getBox(id); response.send(updatedBox); }); //delete item //THIS IS NOT WORKING app.delete('/item/:id', async (request, response) => { Item.deleteOne({_id: request.params.id}, (error, document) => { if(error)return null; return document; }); const updatedBoxes = await getAllBoxes(); response.send(updatedBoxes); }); /*------------/CONTROLLER------------*/ const getAllBoxes = async (queryParameters) => { queryParameters = queryParameters ?? {}; const data = await Box.find(queryParameters, (error, document) => { if(error) return null; return document; }); return data; } const getBox = async (id) => { const data = await Box.findById(id, (error, document) => { if(error) return null; return document; }); return data; }