Search code examples
mysqlnode.jssequelize.jssequelize-cli

Sequelize can create data but can't get data from Models


I'm unable to understand what actually is wrong with my code. But I know there is a problem in how I'm implementing Promise. As Shipment.findAll() returns a Promise, and I'm creating a promise again for my router to consume.

Then why createShipment is working fine, and getAllShipments is not working.

Controller for Shipment

const Worker = require ('../models').Worker;
const Shipment = require ('../models').Shipment;

function createShipment (shipmentName, shipmentStatus) {
    return new Promise ((resolve, reject) => {
        Shipment.create({name: shipmentName, status: shipmentStatus})
            .then (shipment => resolve(shipment)) 
            .catch (error => reject(error));
    });
}

function getAllShipments () {
    return new Promise ((resolve, reject) => {
        Shipment.findAll()
        .then(allShipments => {
            console.log(allShipments);
            return resolve(allShipments);
        })
        .catch(error => reject(error))
    })
}

module.exports = {
    createShipment,
    getAllShipments
}

Shipment Router

var router = require('express').Router();
var Shipment = require('./../../../controllers/shipment');

router.post ('/' , (req,res) => {
    Shipment.createShipment ('New Shipment', 'Pending')
        .then (shipment => {
            res.status(200).json({status: true, data: shipment, errors: null, msg: "Shipment Added Successfully"});
        })
        .catch (error => {
            res.status(200).json({status: false, data: {}, errors: error, msg: "Error Creating Shipment. Please see details in Errors Object"});
        });
});

router.get('/' , (req, res) => {
    Shipment.getAllShipments()
        .then(allShipments => {
            return res.status(200).status({status: true, data: allShipments, errors: null, msg: "All Shipments fetched successfully"});
        })
        .catch(error => {
            return res.status(200).json({status: false, data: {}, errors: error, msg: "Error Fetching Shipments. Please see details in Errors Object"});
        });
})

module.exports = router; 

What I'm doing wrong ? Because getAllShipments is giving my output on console but route is not sending response and just waiting and waiting.


Solution

  • Change :

    Shipment.getAllShipments()
            .then(allShipments => {
                return res.status(200).status({status: true, data: allShipments, errors: null, msg: "All Shipments fetched successfully"});
            })
    

    to:

     return res.status(200).json({status: true, data: allShipments, errors: null, msg: "All Shipments fetched successfully"});
    

    Just a typo and you wrote down a status two times instead of json