0

I am beginner in web dev and trying to create a Full stack project using Mysql Express React Node.js. I tried creating a new device using parameter like serialno(Primary key for db),brand and Modelname. When I ran the api in Postman it didn't read the input and gave message from Contoller js( message: "Content can not be empty!")

server.js

  const express = require("express");
  const bodyParser = require("body-parser");
  const cors = require("cors");

  const app = express();

  var corsOptions = {
    origin: "http://localhost:8081"
  };

  app.use(cors(corsOptions));

  // parse requests of content-type - application/json
  app.use(bodyParser.json());

  app.use(bodyParser.urlencoded({ extended: true }));

  const db = require("./app/models");
  db.sequelize.sync();

  // simple route
  app.get("/", (req, res) => {
    res.json({ message: "Welcome " });
  });

  require("./app/routes/routes")(app);  

  // set port, listen for requests
  const PORT = process.env.PORT || 3000;
  app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}.`);
  });

controller.js(using the first create function, error message:"Content can not be empty!")

const db = require("../models");
const Device = db.devices;
const Op = db.Sequelize.Op;

// Create and Save a new Devices
exports.create = (req, res) => {
  // Validate request
  if (!req.body.serialno) {
    res.status(400).send({
      message: "Content can not be empty!"
    });
    return;
  }

  // Create a Devices
  const device = {
    serialno: req.body.serialno,
    brand: req.body.brand,
    modelname: req.body.modelname 
  };

  // Save Devices in the database
  Device.create(device)
    .then(data => {
      res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message || "Some error occurred while creating the Devices."
      });
    });
};

// Retrieve all Devicess from the database.
exports.findAll = (req, res) => {

    const serialno = req.query.serialno;
    var condition = serialno ? { serialno: { [Op.like]: `%${serialno}%` } } : null;
  
    Device.findAll({ where: condition })
      .then(data => {
        res.send(data);
      })
      .catch(err => {
        res.status(500).send({
          message:
            err.message || "Some error occurred while retrieving Devicess."
        });
      });
  
};

// Find a single Devices with an id
exports.findOne = (req, res) => {

    const id = req.params.id;

    Device.findByPk(id)
      .then(data => {
        res.send(data);
      })
      .catch(err => {
        res.status(500).send({
          message: "Error retrieving Devices with id=" + id
        });
      });
  
};

// Update a Devices by the id in the request
exports.update = (req, res) => {
    const id = req.params.id;

  Device.update(req.body, {
    where: { id: id }
  })
    .then(num => {
      if (num == 1) {
        res.send({
          message: "Devices was updated successfully."
        });
      } else {
        res.send({
          message: `Cannot update Devices with id=${id}. Maybe Devices was not found or req.body is empty!`
        });
      }
    })
    .catch(err => {
      res.status(500).send({
        message: "Error updating Devices with id=" + id
      });
    });
};

// Delete a Devices with the specified id in the request
exports.delete = (req, res) => {

    const id = req.params.id;

    Device.destroy({
      where: { id: id }
    })
      .then(num => {
        if (num == 1) {
          res.send({
            message: "Devices was deleted successfully!"
          });
        } else {
          res.send({
            message: `Cannot delete Devices with id=${id}. Maybe Devices was not found!`
          });
        }
      })
      .catch(err => {
        res.status(500).send({
          message: "Could not delete Devices with id=" + id
        });
      });
  
};

// Delete all Devicess from the database.
exports.deleteAll = (req, res) => {
    Device.destroy({
        where: {},
        truncate: false
      })
        .then(nums => {
          res.send({ message: `${nums} Devicess were deleted successfully!` });
        })
        .catch(err => {
          res.status(500).send({
            message:
              err.message || "Some error occurred while removing all Devicess."
          });
        });
  
};


postman request


http://localhost:3000/api/devices

{
    "serialno":123,
    "brand":"apple",
    "modelname":"XS"
}

model.js

module.exports = (sequelize, Sequelize) => {
    const Device = sequelize.define("device", {
      serialno: {
        type: Sequelize.INTEGER
      },
      brand: {
        type: Sequelize.STRING
      },
      modelname: {
        type: Sequelize.STRING
      }
    });
  
    return Device;
  };
  

routes js

module.exports = app => {
    const devices = require("../controllers/controller.js");
  
    var router = require("express").Router();
  
    // Create a new devicesial
    router.post("/", devices.create);
  
    // Retrieve all devices
    router.get("/", devices.findAll);
  
    // Retrieve all published devices

  
    // Retrieve a single deviceswith id
    router.get("/:id", devices.findOne);
  
    // Update a deviceswith id
    router.put("/:id", devices.update);
  
    // Delete a deviceswith id
    router.delete("/:id", devices.delete);
  
    // Delete all devices
    router.delete("/", devices.deleteAll);
  
    app.use('/api/devices', router);
  };
theta28
  • 73
  • 2
  • 9

1 Answers1

0

I think that you are not getting response back in postman because you forgot to use return before sending back data or error message in response

const db = require("../models");
const Device = db.devices;
const Op = db.Sequelize.Op;

// Create and Save a new Devices
exports.create = (req, res) => {
  // Validate request
  if (!req.body.serialno) {
  return  res.status(400).send({
      message: "Content can not be empty!"
    });
  }

  // Create a Devices
  const device = {
    serialno: req.body.serialno,
    brand: req.body.brand,
    modelname: req.body.modelname 
  };

  // Save Devices in the database
  Device.create(device)
    .then(data => {
    return  res.send(data);
    })
    .catch(err => {
    return  res.status(500).send({
        message:
          err.message || "Some error occurred while creating the Devices."
      });
    });
};

you have to write return before every api's response in your controller file checkout this doc to understand common mistakes of node.js developer do.

Aryan
  • 3,338
  • 4
  • 18
  • 43