Ricardo Trejos
Ricardo Trejos

Reputation: 171

Post an array of objects ExpressJs Mongoose NodeJs

UPDATE

I have a mongoose schema and express controller, now I have to post an Array of Objects based on that schema, I have to post like 30 Objets, here is an example of two I posted and I received that response, and I wanto to see the Array of all Objects.

CoursesModel.ts

const CoursesSchema = new Schema({
    courses: [{
        course_status: String,
        course_code: String,
        course_name: req.body.course_name,
        institute_name: String,
        hour_duration: Number,
        modality: String,
        schedule: String,
        start_date: Date,
        finish_date: Date,
        enroll_date_limit: Date,
        course_value: Number,
    }],
    created_at: {
        type: Date,
        default: Date.now
    }
});

coursesController.ts // createCourse

const Courses = CoursesModel;

public createCourses(req: Request, res: Response) {

        try {

            if (!req.body) {
                throw new Error(`Is missing parameter :  Table data`);
            }

            const createCourse = {
                courses: [{
                    course_status: req.body.course_status,
                    course_code: req.body.course_code,
                    course_name: req.body.course_name,
                    institute_name: req.body.institute_name,
                    hour_duration: req.body.hour_duration,
                    modality: req.body.modality,
                    schedule: req.body.schedule,
                    start_date: req.body.start_date,
                    finish_date: req.body.finish_date,
                    enroll_date_limit: req.body.enroll_date_limit,
                    course_value: req.body.course_value,
                }],
            created_at: new Date()
            };

            let newCourses = new Courses(createCourse);

            newCourses.save().then(data => {
                res.json(data);
            })
                .catch(err => {
                    res.status(500).send({
                        message:
                            err.message || "Some error occurred while creating the course"
                    });
                })
            );

        } catch (error) {

            this.logger.error({
                data: req.body,
                error: error,
                source: 'Error in function createCourses'
            });
            res.status(500);
            return res.send({ error: (error.message) ? error.message : "Internal server error" });
        }

    }

Json body I post on Insomnia

{"courses":[{
    "course_status": "Active",
    "course_code": "0004",
    "institute_name": "Berkley",
    "course_name": "Programming",
    "month_duration": 2,
    "hour_duration": 120,
    "modality": "Virtual",
    "schedule": "2 a 5",
    "start_date": "2021-07-02T05:00:16.000Z",
    "finish_date": "2021-07-02T05:00:16.000Z",
    "enroll_date_limit": "2021-07-02T05:00:16.000Z",
    "course_value": 300000,
 },
 {
    "course_status": "Active",
    "course_code": "0005",
    "institute_name": "MIT",
    "course_name": "Digital Marketing",
    "hour_duration": 120,
    "modality": "Virtual",
    "schedule": "2 a 5",
    "start_date": "2021-07-02T05:00:16.000Z",
    "finish_date": "2021-07-02T05:00:16.000Z",
    "enroll_date_limit": "2021-07-02T05:00:16.000Z",
    "course_value": 300000,
 }]}

This is what I get from Insomnia

Insomnia response

{
  "successfully": true,
  "data": {
    "_id": "5f1ae0e3cf5d702706b5bb09",
    "courses": [
      {
        "_id": "5f1ae0e3cf5d702706b5bb0a"
      }
    ],
    "created_at": "2020-07-24T13:23:47.173Z",
    "__v": 0
  }
}

Upvotes: 0

Views: 1816

Answers (2)

Ricardo Trejos
Ricardo Trejos

Reputation: 171

I solve in this way

const Courses = CoursesModel;

public async createCourses(req: Request, res: Response) {

        try {

            if (!req.body) {
                throw new Error(`Is missing parameter :  Table data`);
            }

            const courses = []
             
         for(const course of req.body.courses){

            const tableCourse ={
                    course_status: course.course_status,
                    course_code: course.course_code,
                    course_name: course.course_name,
                    institute_name: course.institute_name,
                    hour_duration: course.hour_duration,
                    modality: course.modality,
                    schedule: course.schedule,
                    start_date: course.start_date,
                    finish_date: course.finish_date,
                    enroll_date_limit: course.enroll_date_limit,
                    course_value: course.course_value,
                    created_at: new Date()
                };

            let newCourses = new Courses(tableCourse);

                const newCourses = await newTableCourses.save()

                courses.push(newCourses)

            }
            res.json({ successfully: true, data: { courses } });


        } catch (error) {

            this.logger.error({
                data: req.body,
                error: error,
                source: 'Some error occurred while creating the course.'
            });
            res.status(500);
            return res.send({ error: (error.message) ? error.message : "Internal server error" });
        }

    }

CourseModel.ts

const CoursesSchema = new Schema({
        course_status: String,
        course_code: String,
        course_name: req.body.course_name,
        institute_name: String,
        hour_duration: Number,
        modality: String,
        schedule: String,
        start_date: Date,
        finish_date: Date,
        enroll_date_limit: Date,
        course_value: Number,
        created_at: {
          type: Date,
          default: Date.now
    }
});

Upvotes: 1

prax
prax

Reputation: 286

Use res.json(data) instead of res.send(data) and instead of return from directly use save

const Courses = CoursesModel;

public createCourses(req: Request, res: Response) {

        try {

            if (!req.body) {
                throw new Error(`Is missing parameter :  Table data`);
            }

            const createCourse =Courses ({
                courses: [{
                    course_status: req.body.course_status,
                    course_code: req.body.course_code,
                    course_name: req.body.course_name,
                    institute_name: req.body.institute_name,
                    hour_duration: req.body.hour_duration,
                    modality: req.body.modality,
                    schedule: req.body.schedule,
                    start_date: req.body.start_date,
                    finish_date: req.body.finish_date,
                    enroll_date_limit: req.body.enroll_date_limit,
                    course_value: req.body.course_value,
                }],
            created_at: new Date()
            });

            newCourses.save().then(data => {
                res.json(data);
            })
                .catch(err => {
                    res.status(500).send({
                        message:
                            err.message || "Some error occurred while creating the course"
                    });
                })
            );

        } catch (error) {

            this.logger.error({
                data: req.body,
                error: error,
                source: 'Error in function createCourses'
            });
            res.status(500);
            return res.send({ error: (error.message) ? error.message : "Internal server error" });
        }

    }

Upvotes: 0

Related Questions