【问题标题】:error: something went wrong while testing postman错误:测试邮递员时出了点问题
【发布时间】:2021-05-13 22:43:54
【问题描述】:

在通过邮递员测试 api 时遇到错误错误就像“出了点问题”

authRoute.js

这是我编写整个应用程序逻辑的 authRoute,请告诉我如何修复我的错误,并附上我处理错误的 dbErrorHandling.js 文件

const User = require('../models/userModel');
const expressJwt = require('express-jwt');
const _ = require('lodash');
const fetch = require('node-fetch');
const {OAuth2Client} = require('google-auth-library');
const {validationResult} = require('express-validator');
const jwt = require('jsonwebtoken');
//custome error handler to get useful error from the dataase error
const {errorHandler} = require("./helpers/dbErrorHandling");
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.MAIL_KEY)

exports.authRoute = (req,res)=>{
   const {name,email,password} = req.body;
   const errors = validationResult(req);
   if(!errors.isEmpty()){
      const firstError = errors.array().map(error=> error.msg[0])
      return res.status(422).json({
            error:firstError
      })
   }
   else{
      User.findOne({
         email
      }).exec((err,user)=>{
         //if user exists
         if(user){
            return res.status(400).json({
               error:"Email is taken"
            })
         }
      })
      //genrate token

      const token = jwt.sign(
         {
            name,email,password
         },
         process.env.SECRET,
         {
            expiresIn:'15m'
         }
      )
      //email data sending
      const emailData = {
         from : process.env.EMAIL_FROM,
         to:'harsalpatil512@gmail.com',
         subject: "account activation link",
         html:`
         <h1>Please Click link to activate</h1>
         <p>${process.env.CLIENT_URL}/user/activate/${token}</p>
         <hr/>
         <p>This email contain sensitive info</p>
         <p>${process.env.CLIENT_URL}</p>`
      }

      sgMail.send(emailData).then(sent=>{
         return res.json({
            message: `Email has been sent to ${email}`
         })
      })
      .catch(err=>{
         return res.status(400).json({
            error: errorHandler(err)
         })
      })
   }
}

dbErrorHandling.js

这是一个错误处理文件,我收到错误不知道哪里错了

"use strict"

/*

Get Unique error field name

*/

const uniqueMessage = error => {
    let output;
    try {
        let fieldName = error.message.split('$')[1]
        field = field.split('dub key')[0]
        filed = field.subString(0, field.lastIndexOf("_"))
        req.flash('errors', [{
            message: "An account with" + field + "already exists"
        }])

        output = fieldName.charAt(0).toUpperCase() + fieldName.slice(1) + "already exists"
    }
    catch (err) {
        output = "already existes"
    }
    return output
}

/*
Get the error meassage from error object
*/

exports.errorHandler = error => {
    let message = ""
    if (error.code) {
        switch (error.code) {
            case 11000:
            case 11001:
                message = uniqueMessage(error)
                break;
            default:
                message = "something went wrong"
        }
    } else {
        for (let errorName in error.errors) {
            if (error.errors[errorName].message) {
                message = error.errors[errorName].message
            }
        }
    }
    return message
}

【问题讨论】:

    标签: javascript node.js api express postman


    【解决方案1】:

    如果您想使用您的方法,请使用 .status(200) 表示 res,如下所示:

    sgMail.send(emailData).then(sent=>{
      return res.status(200).json({
         message: `Email has been sent to ${email}`
      })
    })
    

    并在.catch 块中使用console.log(err) 来显示真正的错误

    但我更喜欢将 async/await 与 try/catch 一起使用,因为这样更简洁:

    const User = require('../models/userModel');
    const expressJwt = require('express-jwt');
    const _ = require('lodash');
    const fetch = require('node-fetch');
    const {OAuth2Client} = require('google-auth-library');
    const {validationResult} = require('express-validator');
    const jwt = require('jsonwebtoken');
    //custome error handler to get useful error from the dataase error
    const {errorHandler} = require("./helpers/dbErrorHandling");
    const sgMail = require('@sendgrid/mail');
    sgMail.setApiKey(process.env.MAIL_KEY)
    
    exports.authRoute = async (req, res) => {
      const { name, email, password } = req.body;
      const errors = validationResult(req);
      try {
        if (!errors.isEmpty()) {
          const firstError = errors.array().map((error) => error.msg[0]);
          return res.status(422).json({
            error: firstError,
          });
        } else {
          let user = await User.findOne({ email });
          if (user) {
            return res.status(400).json({
              error: "Email is taken",
            });
          }
          //genrate token
    
          const token = jwt.sign(
            {
              name,
              email,
              password,
            },
            process.env.SECRET,
            {
              expiresIn: "15m",
            }
          );
          //email data sending
          const emailData = {
            from: process.env.EMAIL_FROM,
            to: "harsalpatil512@gmail.com",
            subject: "account activation link",
            html: `
             <h1>Please Click link to activate</h1>
             <p>${process.env.CLIENT_URL}/user/activate/${token}</p>
             <hr/>
             <p>This email contain sensitive info</p>
             <p>${process.env.CLIENT_URL}</p>`,
          };
          try {
            await sgMail.send(emailData);
            return res.status(200).json({
              message: `Email has been sent to ${email}`,
            });
          } catch (error) {
            console.error("sgMail Error : ", error);
            if (error.response) {
              console.error(error.response.body);
            }
          }
        }
      } catch (error) {
        console.log("Main Error : ", error);
        return res.status(400).json({
          error: errorHandler(error),
        });
      }
    };
    

    【讨论】:

      猜你喜欢
      • 2019-08-05
      • 2021-01-16
      • 1970-01-01
      • 2022-09-23
      • 2021-03-21
      • 2019-05-14
      • 1970-01-01
      • 2020-07-13
      • 2019-10-26
      相关资源
      最近更新 更多