npm install -s mongoose
npm install -s jsonwebtoken bcryptjs

db정보 파일(.gitignore 추가)

config/db_info.json

{
    "id": "gyu",
    "password": "chango1234",
    "database": "modu_chango"
}

jwt토큰 파일(.gitignore 추가)

config/jwt_info.json

{
    "key": "moduChango"
}

app.js

const express = require('express');
const logger = require('morgan');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const db_info = require('./config/db_info.json');
const port = 3000;
const app = express();

const userController = require('./routes/controllers/userControllers');
const { verifyToken } = require('./routes/middlewares/authorization');

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

// mongodb 연결
const url = `mongodb+srv://${db_info.id}:${db_info.password}@cluster0.xql9i.mongodb.net/${db_info.database}?retryWrites=true&w=majority`

mongoose.connect({
useNewUrlParser: true,
useFindAndModify: false
});

const db = mongoose.connection;
db.on('error', console.error);
db.once('open', function(){
    console.log("Connected to mongodb server");
});

mongoose.connect(url);

// models import
const Product = require('./models/product');
const History = require('./models/history');
const User = require('./models/users');
const Storage = require('./models/storages');

// 로그인
app.post('/login', userController.signIn);

// 회원가입
app.post('/join', userController.signUp);

// 창고 추가
app.post('/storages/add', function(req, res){
    var storage = new Storage();
   
    storage.storageName = req.body.storageName;
    storage.location = req.body.location;
    storage.manager = req.body.manager;
    storage.item = req.body.item;

    storage.save(function(err){
        if(err){
            console.error(err);
            res.json({result: 0});
            return;
        }

        res.json({result: 1});
        
    });
});

// 입출고내역
app.get('/history', function(req,res){
    History.find({}, function(err, history){
        if(err) return res.status(500).send({error: 'database failure'});
        res.json(history);
    })
});

//창고보기
app.get('/storages', verifyToken, function(req,res){
    Storage.find({}, function(err, storage){
        if(err) return res.status(500).send({error: 'database failure'});
        res.json(storage);
    })
});

//창고 자세히 보기
app.get('/storages/:storageName', function(req, res){
    Product.find({storageName: req.params.storageName}, function(err, product){
        if(err) return res.status(500).json({error: err});
        if(!product) return res.status(404).json({error: 'product not found'});
        res.json(product);
    })
});

// 창고 수정
app.put('/storages/edit/:storageName', function(req, res){
    Storage.update({storageName: req.params.storageName }, { $set: req.body }, function(err, output){
        if(err) res.status(500).json({ error: 'database failure' });
        if(!output.modifiedCount) return res.status(404).json({ error: 'storage not found' });
        res.json( {result: 1} );
    })
//창고 수정
/*
app.put('/storages/edit/:storageName', function(req, res){
    Storage.find({storageName: req.params.storageName}, function(err, storage){
        if(err) return res.status(500).json({ error: 'database failure' });
        if(!storage) return res.status(404).json({ error: 'storage not found' });
   
        if(req.body.storageName) storage.storageName = req.body.storageName;
        if(req.body.location) storage.location = req.body.location;
        if(req.body.manager) storage.manager = req.body.manager;
        if(req.body.image) storage.image = req.body.image;
        

        storage.save(function(err){
            if(err) res.status(500).json({error: 'failed to update'});
            res.json({result: 1});
        });

    });

});
*/

//창고 삭제
app.delete('/storages/:storageName', function(req, res){
    Storage.remove({ storageName: req.params.storageName }, function(err, output){
        if(err) return res.status(500).json({ error: "delete failed"})
       
        res.json({result: 1});    
    })
});

app.listen(port, () => {
    console.log(`Server is running at ${port}`);
});

models/products.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var productSchema = new Schema({
    NIIN: {type: String, required: true},
    productName: {type: String, required: true},
    storageName: {type: String, required: true}
});

module.exports = mongoose.model('products', productSchema);

models/history.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var historySchema = new Schema({
    NIIN: {type: String, required: true},
    productName: {type: String, required: true},
    storageName: {type: String, required: true},
    state: {type: String, required: true},
    date: { type: Date, default: Date.now  }
});

module.exports = mongoose.model('history', historySchema);

models/users.js