How do I generate a new Error() with Mongoose that maintains the same nested structure as the standard...












1















Question



How do I generate an error that is more easily iterable on the front-end from Mongoose, that maintains the standard Validation error structure using new Error()?



Issue



I have a handful of validations that run on my Mongoose schema. I have a pre-save function that I'm using to encrypt a password using bcrypt. I'm trying to make sure I catch all promises, and I've got a situation where I may receive an error from bcrypt if a user's password is not successfully hashed. I'd like to generate a generic error that I can have display on the front-end. Right now I iterate through validation errors in the error.errors object which is returned from Mongoose in the following format:



// Schema
const MySchema = new Schema(
{
myField: {
type: String,
minlength: [3, "My Field must be 3-30 characters."],
maxlength: [30, "My Field must be 3-30 characters."],
required: [true, "My Field is required."],
trim: true
},
)

// Errors returned in the following format:

errors: {
myField: {
message: "Custom error warns foo must be bar."
},
// ... more error'd fields here
}


I'd like to add a custom error in the same format, so that the single error.errors object I'm sending back to my front-end in JSON format is easily iterable. Right now, I take my bcrypt error, and format my own object in this similar format, but it's not a very elegant way to do things.



I may be confused on how to properly use New Error("My custom error here") and may be making my validation harder than it needs to be, and would love any insight.



Code




  • You can see on Line 88 in my User-model.js that I'm catching a bcrypt error and formatting an object that resembles the same hierarchy as the standard validation errors object (afore noted).


  • I then send the error.errors object via JSON from the backend Line 19 in user-controller.js to the front-end for iteration.



Is there a cleaner way to utilize New Error() and make my error handling a bit nicer, without having to format my own error objects in this way?










share|improve this question





























    1















    Question



    How do I generate an error that is more easily iterable on the front-end from Mongoose, that maintains the standard Validation error structure using new Error()?



    Issue



    I have a handful of validations that run on my Mongoose schema. I have a pre-save function that I'm using to encrypt a password using bcrypt. I'm trying to make sure I catch all promises, and I've got a situation where I may receive an error from bcrypt if a user's password is not successfully hashed. I'd like to generate a generic error that I can have display on the front-end. Right now I iterate through validation errors in the error.errors object which is returned from Mongoose in the following format:



    // Schema
    const MySchema = new Schema(
    {
    myField: {
    type: String,
    minlength: [3, "My Field must be 3-30 characters."],
    maxlength: [30, "My Field must be 3-30 characters."],
    required: [true, "My Field is required."],
    trim: true
    },
    )

    // Errors returned in the following format:

    errors: {
    myField: {
    message: "Custom error warns foo must be bar."
    },
    // ... more error'd fields here
    }


    I'd like to add a custom error in the same format, so that the single error.errors object I'm sending back to my front-end in JSON format is easily iterable. Right now, I take my bcrypt error, and format my own object in this similar format, but it's not a very elegant way to do things.



    I may be confused on how to properly use New Error("My custom error here") and may be making my validation harder than it needs to be, and would love any insight.



    Code




    • You can see on Line 88 in my User-model.js that I'm catching a bcrypt error and formatting an object that resembles the same hierarchy as the standard validation errors object (afore noted).


    • I then send the error.errors object via JSON from the backend Line 19 in user-controller.js to the front-end for iteration.



    Is there a cleaner way to utilize New Error() and make my error handling a bit nicer, without having to format my own error objects in this way?










    share|improve this question



























      1












      1








      1


      0






      Question



      How do I generate an error that is more easily iterable on the front-end from Mongoose, that maintains the standard Validation error structure using new Error()?



      Issue



      I have a handful of validations that run on my Mongoose schema. I have a pre-save function that I'm using to encrypt a password using bcrypt. I'm trying to make sure I catch all promises, and I've got a situation where I may receive an error from bcrypt if a user's password is not successfully hashed. I'd like to generate a generic error that I can have display on the front-end. Right now I iterate through validation errors in the error.errors object which is returned from Mongoose in the following format:



      // Schema
      const MySchema = new Schema(
      {
      myField: {
      type: String,
      minlength: [3, "My Field must be 3-30 characters."],
      maxlength: [30, "My Field must be 3-30 characters."],
      required: [true, "My Field is required."],
      trim: true
      },
      )

      // Errors returned in the following format:

      errors: {
      myField: {
      message: "Custom error warns foo must be bar."
      },
      // ... more error'd fields here
      }


      I'd like to add a custom error in the same format, so that the single error.errors object I'm sending back to my front-end in JSON format is easily iterable. Right now, I take my bcrypt error, and format my own object in this similar format, but it's not a very elegant way to do things.



      I may be confused on how to properly use New Error("My custom error here") and may be making my validation harder than it needs to be, and would love any insight.



      Code




      • You can see on Line 88 in my User-model.js that I'm catching a bcrypt error and formatting an object that resembles the same hierarchy as the standard validation errors object (afore noted).


      • I then send the error.errors object via JSON from the backend Line 19 in user-controller.js to the front-end for iteration.



      Is there a cleaner way to utilize New Error() and make my error handling a bit nicer, without having to format my own error objects in this way?










      share|improve this question
















      Question



      How do I generate an error that is more easily iterable on the front-end from Mongoose, that maintains the standard Validation error structure using new Error()?



      Issue



      I have a handful of validations that run on my Mongoose schema. I have a pre-save function that I'm using to encrypt a password using bcrypt. I'm trying to make sure I catch all promises, and I've got a situation where I may receive an error from bcrypt if a user's password is not successfully hashed. I'd like to generate a generic error that I can have display on the front-end. Right now I iterate through validation errors in the error.errors object which is returned from Mongoose in the following format:



      // Schema
      const MySchema = new Schema(
      {
      myField: {
      type: String,
      minlength: [3, "My Field must be 3-30 characters."],
      maxlength: [30, "My Field must be 3-30 characters."],
      required: [true, "My Field is required."],
      trim: true
      },
      )

      // Errors returned in the following format:

      errors: {
      myField: {
      message: "Custom error warns foo must be bar."
      },
      // ... more error'd fields here
      }


      I'd like to add a custom error in the same format, so that the single error.errors object I'm sending back to my front-end in JSON format is easily iterable. Right now, I take my bcrypt error, and format my own object in this similar format, but it's not a very elegant way to do things.



      I may be confused on how to properly use New Error("My custom error here") and may be making my validation harder than it needs to be, and would love any insight.



      Code




      • You can see on Line 88 in my User-model.js that I'm catching a bcrypt error and formatting an object that resembles the same hierarchy as the standard validation errors object (afore noted).


      • I then send the error.errors object via JSON from the backend Line 19 in user-controller.js to the front-end for iteration.



      Is there a cleaner way to utilize New Error() and make my error handling a bit nicer, without having to format my own error objects in this way?







      node.js mongodb validation mongoose error-handling






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 20 at 11:13







      twknab

















      asked Jan 20 at 0:17









      twknabtwknab

      693918




      693918
























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54272516%2fhow-do-i-generate-a-new-error-with-mongoose-that-maintains-the-same-nested-str%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54272516%2fhow-do-i-generate-a-new-error-with-mongoose-that-maintains-the-same-nested-str%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Liquibase includeAll doesn't find base path

          How to use setInterval in EJS file?

          Petrus Granier-Deferre