Client/Server Multiple File Upload made easy using Express-Fileupload (Angular and Express)

Prerequisite: This tutorial requires you to have a basic understanding of server-side applications and nodejs.

There are so many modules you can use to upload files to the server, but I will be using  express-fileupload.  and my client application is angular and the server is nodejs.

1. Installation

 The following command will install express-fileupload.

npm install express-fileupload

Next, is a client’s (Angular Material step form) where I will upload company details along with five documents.

html code below


<!-- more-->
<mat-horizontal-stepper [linear]="isLinear" #stepper>
  <mat-step>
    <!-- contact details -->

    <form #contactForm="ngForm" name="contactForm" class="form">
      <ng-template matStepLabel>contacts</ng-template>

      <mat-form-field>
        <mat-label>ComPany name</mat-label>

        <input
          matInput
          readonly
          #companyName
          placeholder="company name"
          type="text"
          name="companyName"
          [(ngModel)]="companyModel.companyName"
          required
        />
      </mat-form-field>

      <mat-form-field>
        <mat-label>ComPany Address</mat-label>

        <input
          matInput
          #companyAddress
          placeholder="company address"
          type="text"
          name="companyAddress"
          [(ngModel)]="companyModel.companyAddress"
          required
        />
      </mat-form-field>

      <mat-form-field>
        <mat-label>ComPany Phome</mat-label>

        <input
          matInput
          #companyPhone
          placeholder="company phone"
          type="text"
          name="companyPhone"
          [(ngModel)]="companyModel.companyPhone"
          required
        />
      </mat-form-field>

      <mat-form-field>
        <mat-label>Contact mail</mat-label>

        <input
          matInput
          #contactMail
          placeholder="company mail"
          type="email"
          name="contactMail"
          [(ngModel)]="companyModel.contactMail"
          required
        />
      </mat-form-field>

      <div>
        <button
          color="primary"
          [disabled]="!contactForm.valid"
          mat-button
          matStepperNext
        >
          Next
        </button>
      </div>
    </form>
  </mat-step>

  <mat-step>
    <!-- company cac certificate -->

    <form #detailForm="ngForm" name="detailForm" class="form">
      <ng-template matStepLabel>details</ng-template>

      <mat-form-field>
        <mat-label>Rc numbers</mat-label>

        <input
          matInput
          #rcNumber
          placeholder="registration number"
          type="text"
          name="rcNumber"
          [(ngModel)]="companyModel.rcNumber"
          required
        />
      </mat-form-field>

      <ion-row>
        <ion-col>
          <small class="ion-margin">cac certificate</small>

          <ion-item>
            <ion-input
              #cacCertificate
              type="file"
              (change)="cacCertInput($event)"
              name="cacCertificate"
              accept=".pdf"
              [(ngModel)]="companyModel.cacCertificate"
              required
            ></ion-input>
          </ion-item>
        </ion-col>
      </ion-row>

      <mat-form-field>
        <mat-label>cac status</mat-label>

        <input
          matInput
          #cacCertStatus
          placeholder=" approved"
          type="text"
          name="cacCertStatus"
          [(ngModel)]="companyModel.cacCertStatus"
          required
        />
      </mat-form-field>

      <div>
        <button color="warn" mat-button matStepperPrevious>Back</button>

        <button
          color="primary"
          [disabled]="!detailForm.valid"
          mat-button
          matStepperNext
        >
          Next
        </button>
      </div>
    </form>
  </mat-step>

  <mat-step>
    <!--  award form -->

    <form #awardForm="ngForm" name="awardForm" class="form">
      <ng-template matStepLabel>award</ng-template>

      <ion-row>
        <ion-col>
          <small class="ion-margin">award letter</small>

          <ion-item>
            <ion-input
              #awardLatter
              type="file"
              (change)="awardLatterInput($event)"
              name="awardLatter"
              accept=".pdf"
              [(ngModel)]="companyModel.awardLetter"
              required
            ></ion-input>
          </ion-item>
        </ion-col>
      </ion-row>

      <mat-form-field>
        <mat-label>award leter status</mat-label>

        <input
          matInput
          #cacCertStatus
          placeholder="approved"
          type="text"
          name="awardLetterStatus"
          [(ngModel)]="companyModel.awardLetterStatus"
          required
        />
      </mat-form-field>

      <div>
        <button color="warn" mat-button matStepperPrevious>Back</button>

        <button
          color="primary"
          [disabled]="!awardForm.valid"
          mat-button
          matStepperNext
        >
          Next
        </button>
      </div>
    </form>
  </mat-step>

  <mat-step>
    <!--  contract form -->

    <form #contractForm="ngForm" name="contractForm" class="form">
      <ng-template matStepLabel>contract</ng-template>

      <mat-form-field>
        <mat-label>number of contract</mat-label>

        <input
          matInput
          #numberOfContracts
          placeholder=""
          type="text"
          name="numberOfContracts"
          [(ngModel)]="companyModel.numberOfContract"
          required
        />
      </mat-form-field>

      <ion-row>
        <ion-col>
          <small class="ion-margin">contract latter</small>

          <ion-item>
            <ion-input
              #contractLatter
              type="file"
              (change)="contractLatterInput($event)"
              name="contractLatter"
              accept=".pdf"
              [(ngModel)]="companyModel.contractLetter"
              required
            >
            </ion-input>
          </ion-item>
        </ion-col>
      </ion-row>
      <mat-form-field>
        <mat-label>contract later status</mat-label>
        <input
          matInput
          #contractLatterStatus
          placeholder=""
          type="text"
          name="contractLatterStatus"
          [(ngModel)]="companyModel.contractLetterStatus"
          required
        />
      </mat-form-field>
      <div>
        <button color="warn" mat-button matStepperPrevious>Back</button>
        <button
          color="primary"
          [disabled]="!contractForm.valid"
          mat-button
          matStepperNext
        >
          Next
        </button>
      </div>
    </form>
  </mat-step>
  <mat-step>
    <form #taxForm="ngForm" name="taxForm" class="form">
      <ng-template matStepLabel>tax</ng-template>
      <ion-row>
        <ion-col>
          <small class="ion-margin">tax clearance</small>
          <ion-item>
            <ion-input
              #taxClearance
              type="file"
              (change)="taxClearanceInput($event)"
              name="taxClearance"
              accept=".pdf"
              [(ngModel)]="companyModel.taxClearance"
              required
            ></ion-input>
          </ion-item>
        </ion-col>
      </ion-row>
      <mat-form-field>
        <mat-label>tax document status</mat-label>
        <input
          matInput
          #taxClearanceStatus
          placeholder=""
          type="text"
          name="taxClearanceStatus"
          [(ngModel)]="companyModel.taxClearanceStatus"
          required
        />
      </mat-form-field>
      <div>
        <button color="warn" mat-button matStepperPrevious>Back</button>
        <button
          color="primary"
          [disabled]="!taxForm.valid"
          mat-button
          matStepperNext
        >
          Next
        </button>
      </div>
    </form>
  </mat-step>
  <mat-step>
    <form #mouForm="ngForm" name="mouForm" class="form">
      <ng-template matStepLabel>mou</ng-template>
      <ion-row>
        <ion-col>
          <small class="ion-margin">mou document</small>
          <ion-item>
            <ion-input
              #mouFile
              type="file"
              (change)="mouFileInput($event)"
              name="mouFile"
              accept=".pdf"
              [(ngModel)]="companyModel.mouFile"
              required
            ></ion-input>
          </ion-item>
        </ion-col>
      </ion-row>
      <mat-form-field>
        <mat-label>mou document status</mat-label>
        <input
          matInput
          #mouFileStatus
          placeholder="approved"
          type="text"
          name="mouFileStatus"
          [(ngModel)]="companyModel.mouFileStatus"
          required
        />
      </mat-form-field>
      <div>
        <button color="warn" mat-button matStepperPrevious>Back</button>
        <button
          color="primary"
          [disabled]="!mouForm.valid"
          mat-button
          matStepperNext
        >
          Next
        </button>
      </div>
    </form>
  </mat-step>

  <mat-step>
    <form #positionForm="ngForm" name="positionForm" class="form">
      <ng-template matStepLabel>position</ng-template>
      <mat-form-field>
        <mat-label>your position</mat-label>
        <input
          matInput
          #yourPosition
          placeholder=""
          type="text"
          name="yourPosition"
          [(ngModel)]="companyModel.yourPosition"
          required
        />
      </mat-form-field>
      <mat-form-field>
        <mat-label>your name</mat-label>
        <input
          matInput
          #yourName
          placeholder=""
          type="text"
          name="yourName"
          [(ngModel)]="companyModel.yourName"
          required
        />
      </mat-form-field>
      <ion-col>
        <mat-form-field>
          <mat-label>director 1</mat-label>
          <input
            matInput
            #director1
            placeholder=""
            type="text"
            name="director1"
            [(ngModel)]="companyModel.director1"
            required
          />
        </mat-form-field>
        <mat-form-field>
          <mat-label>director 1 phone</mat-label>
          <input
            matInput
            #director1Phone
            placeholder=""
            type="text"
            name="director1Phone"
            [(ngModel)]="companyModel.director1Phone"
            required
          />
        </mat-form-field>
      </ion-col>

      <ion-col>
        <mat-form-field>
          <mat-label>director 2</mat-label>
          <input
            matInput
            #director2
            placeholder=""
            type="text"
            name="director2"
            [(ngModel)]="companyModel.director2"
            required
          />
        </mat-form-field>
        <mat-form-field>
          <mat-label>director 2 phone</mat-label>
          <input
            matInput
            #director2Phone
            placeholder=""
            type="text"
            name="director2Phone"
            [(ngModel)]="companyModel.director2Phone"
            required
          />
        </mat-form-field>
      </ion-col>
      <div>
        <button color="warn" mat-button matStepperPrevious>Back</button>
        <ion-button
          color="success"
          [disabled]="!positionForm.valid"
          (click)="submitRecord()"
          >finish
        </ion-button>
      </div>
    </form>
  </mat-step>
</mat-horizontal-stepper>
<ion-card>
  <ion-card-content>
    <ion-item lines="none" class="ion-no-padding">
      <ion-img src="assets/icon/menu-btn.png" slot="end" (click)="menuClicked()"></ion-img>
      <ion-card-title>{{event.title}}</ion-card-title>
    </ion-item>
    <ion-card-subtitle>{{event.date | date:'fullDate'}} | {{event.time}} - {{event.endTime}}</ion-card-subtitle>
    <ion-item lines="none" *ngIf="event.theme" class="ion-no-padding">
      <ion-label><b>THEME: </b><br>{{event.theme}}</ion-label>
    </ion-item>
    <ion-item lines="none" *ngIf="event.speaker" class="ion-no-padding">
      <ion-label><b>SPEAKER: </b><br>{{event.speaker}}</ion-label>
    </ion-item>
    <ion-item lines="none" *ngIf="event.description" class="ion-no-padding">
      <ion-label><b>DESCRIPTION: </b><br>{{event.description}}</ion-label>
    </ion-item>
  </ion-card-content>
</ion-card>



<!-- more-->
<mat-horizontal-stepper [linear]="isLinear" #stepper>
  <mat-step>
    <!-- contact details -->
    <form #contactForm="ngForm" name="contactForm" class="form">
      <ng-template matStepLabel>contacts</ng-template>


      <mat-form-field>


        <mat-label>ComPany name</mat-label>
        <input matInput readonly #companyName placeholder="company name" type="text" name="companyName"
          [(ngModel)]="companyModel.companyName" required>
      </mat-form-field>
      <mat-form-field>
        <mat-label>ComPany Address</mat-label>
        <input matInput #companyAddress placeholder="company address" type="text" name="companyAddress"
          [(ngModel)]="companyModel.companyAddress" required>
      </mat-form-field>
      <mat-form-field>
        <mat-label>ComPany Phome</mat-label>
        <input matInput #companyPhone placeholder="company phone" type="text" name="companyPhone"
          [(ngModel)]="companyModel.companyPhone" required>
      </mat-form-field>
      <mat-form-field>
        <mat-label>Contact mail</mat-label>
        <input matInput #contactMail placeholder="company mail" type="email" name="contactMail"
          [(ngModel)]="companyModel.contactMail" required>
      </mat-form-field>
      <div>
        <button color="primary" [disabled]="!contactForm.valid" mat-button matStepperNext>Next</button>
      </div>
    </form>
  </mat-step>
  <mat-step>
    <!-- company cac certificate -->
    <form #detailForm="ngForm" name="detailForm" class="form">
      <ng-template matStepLabel>details</ng-template>
      <mat-form-field>
        <mat-label>Rc numbers</mat-label>
        <input matInput #rcNumber placeholder="registration number" type="text" name="rcNumber"
          [(ngModel)]="companyModel.rcNumber" required>
      </mat-form-field>
      <ion-row>
        <ion-col>
          <small class="ion-margin">cac certificate</small>
          <ion-item>
            <ion-input #cacCertificate type="file" (change)="cacCertInput($event)" name="cacCertificate" accept=".pdf"
              [(ngModel)]="companyModel.cacCertificate" required></ion-input>
          </ion-item>
        </ion-col>
      </ion-row>
      <mat-form-field>
        <mat-label>cac status</mat-label>
        <input matInput #cacCertStatus placeholder=" approved" type="text" name="cacCertStatus"
          [(ngModel)]="companyModel.cacCertStatus" required>
      </mat-form-field>
      <div>
        <button color="warn" mat-button matStepperPrevious>Back</button>
        <button color="primary" [disabled]="!detailForm.valid" mat-button matStepperNext>Next</button>
      </div>
    </form>
  </mat-step>
  <mat-step>

    <!--  award form -->
    <form #awardForm="ngForm" name="awardForm" class="form">
      <ng-template matStepLabel>award</ng-template>
      <ion-row>
        <ion-col>
          <small class="ion-margin">award letter</small>
          <ion-item>
            <ion-input #awardLatter type="file" (change)="awardLatterInput($event)" name="awardLatter" accept=".pdf"
              [(ngModel)]="companyModel.awardLetter" required></ion-input>
          </ion-item>
        </ion-col>
      </ion-row>
      <mat-form-field>
        <mat-label>award leter status</mat-label>
        <input matInput #cacCertStatus placeholder="approved" type="text" name="awardLetterStatus"
          [(ngModel)]="companyModel.awardLetterStatus" required>
      </mat-form-field>
      <div>
        <button color="warn" mat-button matStepperPrevious>Back</button>
        <button color="primary" [disabled]="!awardForm.valid" mat-button matStepperNext>Next</button>
      </div>
    </form>
  </mat-step>
  <mat-step>

    <!--  contract form -->
    <form #contractForm="ngForm" name="contractForm" class="form">
      <ng-template matStepLabel>contract</ng-template>
      <mat-form-field>
        <mat-label>number of contract</mat-label>
        <input matInput #numberOfContracts placeholder="" type="text" name="numberOfContracts"
          [(ngModel)]="companyModel.numberOfContract" required>
      </mat-form-field>
      <ion-row>
        <ion-col>
          <small class="ion-margin">contract latter</small>
          <ion-item>


            <ion-input #contractLatter type="file" (change)="contractLatterInput($event)" name="contractLatter"
              accept=".pdf" [(ngModel)]="companyModel.contractLetter" required>
            </ion-input>
          </ion-item>
        </ion-col>
      </ion-row>
      <mat-form-field>
        <mat-label>contract later status</mat-label>
        <input matInput #contractLatterStatus placeholder="" type="text" name="contractLatterStatus"
          [(ngModel)]="companyModel.contractLetterStatus" required>
      </mat-form-field>
      <div>
        <button color="warn" mat-button matStepperPrevious>Back</button>
        <button color="primary" [disabled]="!contractForm.valid" mat-button matStepperNext>Next</button>

      </div>
    </form>
  </mat-step>
  <mat-step>
    <form #taxForm="ngForm" name="taxForm" class="form">
      <ng-template matStepLabel>tax</ng-template>
      <ion-row>
        <ion-col>
          <small class="ion-margin">tax clearance</small>
          <ion-item>
            <ion-input #taxClearance type="file" (change)="taxClearanceInput($event)" name="taxClearance" accept=".pdf"
              [(ngModel)]="companyModel.taxClearance" required></ion-input>
          </ion-item>
        </ion-col>
      </ion-row>
      <mat-form-field>
        <mat-label>tax document status</mat-label>
        <input matInput #taxClearanceStatus placeholder="" type="text" name="taxClearanceStatus"
          [(ngModel)]="companyModel.taxClearanceStatus" required>
      </mat-form-field>
      <div>
        <button color="warn" mat-button matStepperPrevious>Back</button>
        <button color="primary" [disabled]="!taxForm.valid" mat-button matStepperNext>Next</button>
      </div>
    </form>
  </mat-step>
  <mat-step>
    <form #mouForm="ngForm" name="mouForm" class="form">
      <ng-template matStepLabel>mou</ng-template>
      <ion-row>
        <ion-col>
          <small class="ion-margin">mou document</small>
          <ion-item>
            <ion-input #mouFile type="file" (change)="mouFileInput($event)" name="mouFile" accept=".pdf"
              [(ngModel)]="companyModel.mouFile" required></ion-input>
          </ion-item>
        </ion-col>
      </ion-row>
      <mat-form-field>
        <mat-label>mou document status</mat-label>
        <input matInput #mouFileStatus placeholder="approved" type="text" name="mouFileStatus"
          [(ngModel)]="companyModel.mouFileStatus" required>
      </mat-form-field>
      <div>
        <button color="warn" mat-button matStepperPrevious>Back</button>
        <button color="primary" [disabled]="!mouForm.valid" mat-button matStepperNext>Next</button>
      </div>
    </form>
  </mat-step>

  <mat-step>
    <form #positionForm="ngForm" name="positionForm" class="form">
      <ng-template matStepLabel>position</ng-template>
      <mat-form-field>
        <mat-label>your position</mat-label>
        <input matInput #yourPosition placeholder="" type="text" name="yourPosition"
          [(ngModel)]="companyModel.yourPosition" required>
      </mat-form-field>
      <mat-form-field>
        <mat-label>your name</mat-label>
        <input matInput #yourName placeholder="" type="text" name="yourName" [(ngModel)]="companyModel.yourName"
          required>
      </mat-form-field>
      <ion-col>
        <mat-form-field>
          <mat-label>director 1</mat-label>
          <input matInput #director1 placeholder="" type="text" name="director1" [(ngModel)]="companyModel.director1"
            required>
        </mat-form-field>
        <mat-form-field>
          <mat-label>director 1 phone</mat-label>
          <input matInput #director1Phone placeholder="" type="text" name="director1Phone"
            [(ngModel)]="companyModel.director1Phone" required>
        </mat-form-field>
      </ion-col>

      <ion-col>
        <mat-form-field>
          <mat-label>director 2</mat-label>
          <input matInput #director2 placeholder="" type="text" name="director2" [(ngModel)]="companyModel.director2"
            required>
        </mat-form-field>
        <mat-form-field>
          <mat-label>director 2 phone</mat-label>
          <input matInput #director2Phone placeholder="" type="text" name="director2Phone"
            [(ngModel)]="companyModel.director2Phone" required>
        </mat-form-field>
      </ion-col>
      <div>
        <button color="warn" mat-button matStepperPrevious>Back</button>
        <ion-button color="success" [disabled]="!positionForm.valid" (click)="submitRecord()">finish
        </ion-button>
      </div>
    </form>
  </mat-step>
</mat-horizontal-stepper>

Below is the model for the above form in your ts file.

companyModel = { companyName:'', rcNumber:'',  companyAddress:'',

  companyPhone:'',contactMail:'', numberOfContract:'',cacCertificate:null,

  cacCertStatus:'', awardLetter:null, awardLetterStatus:'', contractLetter:null,

  contractLetterStatus:'', mouFile:null, mouFileStatus:'', taxClearance:null,

  taxClearanceStatus:'', yourPosition:'', yourName:'',director1:'', director2:'',

  director1Phone:'', director2Phone:''

  }

Next, after filling the form, on submission we will pass the model value to formData() below


submitRecord(){

    console.log(this.companyModel);

    const formData = new FormData();

    formData.append('companyName', this.companyModel.companyName);

    formData.append('rcNumber', this.companyModel.rcNumber);

    formData.append('companyAddress', this.companyModel.companyAddress);

    formData.append('companyPhone', this.companyModel.companyPhone);

    formData.append('contactMail', this.companyModel.contactMail);

    formData.append('numberOfContract', this.companyModel.numberOfContract);

    formData.append('cacCertificate', this.companyModel.cacCertificate, this.companyModel.cacCertificate.name);

    formData.append('cacCertStatus', this.companyModel.cacCertStatus);

    formData.append('awardLetter', this.companyModel.awardLetter, this.companyModel.awardLetter.name);

    formData.append('awardLetterStatus', this.companyModel.awardLetterStatus);

    formData.append('contractLetter', this.companyModel.contractLetter, this.companyModel.contractLetter.name);

    formData.append('contractLetterStatus', this.companyModel.contractLetterStatus);

    formData.append('mouFile', this.companyModel.mouFile, this.companyModel.mouFile.name);

    formData.append('mouFileStatus', this.companyModel.mouFileStatus);

    formData.append('taxClearance', this.companyModel.taxClearance, this.companyModel.taxClearance.name);

    formData.append('taxClearanceStatus', this.companyModel.taxClearanceStatus);

    formData.append('yourPosition', this.companyModel.yourPosition);

    formData.append('yourName', this.companyModel.yourName);

    formData.append('director1', this.companyModel.director1);

    formData.append('director2', this.companyModel.director2);

    formData.append('director1Phone', this.companyModel.director1Phone);

    formData.append('director2Phone', this.companyModel.director2Phone);

    this.companyService.submitCompanyRecord(formData).subscribe(

        res => {
            this.userService.generalToastShort('success', res['msg']);
            this.clearForm();
            setTimeout(() => {
                this.router.navigateByUrl('/my-company');
            })
        },
        err => {
            this.userService.generalToast('error', err.error.msg);
        }
    );
}

the following is an API to submit the FormData housing our files and documents.

submitCompanyRecord(comRecord){
    return this.http.post(environment.apiBaseUrl + '/company/submit-record', comRecord); 
  }

Next is a Backend API(Express) endpoint which will save our document. As expected you should have created a general folder for the incoming files and a model for JSON object.

The first thing to do is to import all the necessary modules.



const express = require("express");

const mongoose = require('mongoose');

const router = express.Router();

const fs = require('fs');

const path = require('path');

const jwt_helper = require('../config/jwt_helper');

const CompanyModel = mongoose.model('companyModel');

If everything is ok, I want to remove white space from the company’s name and create a folder with that folder name with space.



 const  company_folder =  req.body.companyName.toLowerCase().split(' ').join('_');

        console.log('com folder',company_folder);

        try{


            // create company's folder
            await fs.promises.mkdir(`data/${company_folder}`, { recursive: true })
        } catch(err){

            console.log(err, 'ERROR CREATING COMPANY FOLDER');

        }

Next, we will save all necessary body objects using the companyModel instance.


        newCompanyRecord.companyAddress =  req.body.companyAddress;

        newCompanyRecord.companyPhone =  req.body.companyPhone;

        newCompanyRecord.contactMail =  req.body.contactMail;

        newCompanyRecord.numberOfContract =  req.body.numberOfContract;

        // cac certificate

        newCompanyRecord.cacCertificate.name =  req.files.cacCertificate.name;  

        newCompanyRecord.cacCertificate.status =  req.body.cacCertStatus;

        newCompanyRecord.cacCertificate.url =  `data/${company_folder}/`+req.files.cacCertificate.name;

        //  award letter

        newCompanyRecord.awardLetter.name =   req.files.awardLetter.name;

        newCompanyRecord.awardLetter.status =  req.body.awardLetterStatus;

        newCompanyRecord.awardLetter.url =  `data/${company_folder}/`+req.files.awardLetter.name;

         //  award letter

        newCompanyRecord.contractLetter.name =   req.files.contractLetter.name;

        newCompanyRecord.contractLetter.status =  req.body.contractLetterStatus;

        newCompanyRecord.contractLetter.url =  `data/${company_folder}/`+req.files.contractLetter.name;

        newCompanyRecord.mouFile.name =  req.files.mouFile.name;

        newCompanyRecord.mouFile.status =  req.body.mouFileStatus;

        newCompanyRecord.mouFile.url =  `data/${company_folder}/`+req.files.mouFile.name;

         //  taxClearance letter

        newCompanyRecord.taxClearance.name =   req.files.taxClearance.name;

        newCompanyRecord.taxClearance.status =  req.body.taxClearanceStatus;

        newCompanyRecord.taxClearance.url =  `data/${company_folder}/`+req.files.taxClearance.name;

        newCompanyRecord.yourPosition =  req.body.yourPosition;

        newCompanyRecord.yourName =  req.body.yourName;

        console.log('contact mail',req.body.contactMail);

        newCompanyRecord.contactEmail =  req.body.contactEmail;

        newCompanyRecord.director1.name =  req.body.director1;

        newCompanyRecord.director1.phone =  req.body.director1Phone;

        newCompanyRecord.director2.name =  req.body.director2;

        newCompanyRecord.director2.phone =  req.body.director2Phone;

        newCompanyRecord.save().then((record)=> {

            console.log(record);
        res.status(200).send({msg:' record has been saved!'});

        })

      }

} ); 

router.get('/get-company', jwt_helper.verifyJwtToken, async (req, res)=> {

   await CompanyModel.find({user_id: req._id}).then((record)=> {

       if(!record){
          res.status(404).send({msg:'no record found'});
       }else{
          res.status(200).send({record: record});
       }


   });

If your upload process is successful, you will get a successful response at the client-side and your metadata is saved in database and files are saved in a folder. (data/company name).

swagasoft

Fully stack(MEAN) software engineer with over five years of experience participating in the complete product development lifecycle of successfully launched applications. Eager and willing to deliver mission- critical technology solutions.

View all posts by swagasoft →

Leave a Reply

Your email address will not be published. Required fields are marked *