最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

单独的注册和登录服务的处理错误

IT培训 admin 0浏览 0评论

单独的注册和登录服务的处理错误

我有一个简单的身份验证系统。我有两个单独的文件用于登录和注册功能。我将在下面提供注册功能。

const User = require('../models/User')
const jwt = require('jsonwebtoken')
const bcrypt = require('bcryptjs')

const register = async (data) => {
    //hash the password 
    var hashedPassword = bcrypt.hashSync(data.password, 10)
     //create the user
    const user = new User({
        username: data.username,
        email: data.email,
        password: hashedPassword
    });
    try {
        const createdUser = await user.save()
        return createdUser
      } catch (err) {
        return err
    }
}
module.exports = register

您可以看到寄存器异步运行,如果一切正常,则返回创建的用户,否则返回错误。以下是使用此服务的路线。

const router = require("express").Router()
const User = require("../../models/User")
const jwt = require('jsonwebtoken')
var bcrypt = require("bcryptjs")
const register = require('../../services/register')
const login = require('../../services/login')
const { registerValidation,loginValidation } = require('../../services/validator')


router.post("/register", async (req, res) => {

  //validate data before creating user
  const { error } = registerValidation(req.body)
  if (error) return res.status(400).send(error.details[0].message)

   //check if user  exisits
   const user = await User.findOne({ email: req.body.email })
   if (user) return res.status(400).send({status:400,message: "User already exists!"})

  //register the user
  try {
    const registerResult = await register(req.body)
    return res.send(registerResult)
  } catch(err) {
    return res.status(500).send({status:500,message:"Something went wrong."})
  }
});
module.exports = router

但是问题是始终等待返回解决,这就是我们使用catch的原因。在Register服务中,一切都很好,它将捕获该错误并将其返回。但是在路由器中:

try {
    const registerResult = await register(req.body)
    return res.send(registerResult)
  } catch(err) {
    return res.status(500).send({status:500,message:"Something went wrong."})
  }

registerResult变量捕获了所有无关紧要的内容,无论是error还是result from resolve我在两个模块中都重复trycatch。我想捕获在创建用户期间发生的任何错误并发送自定义错误。是否有更好的方法可以从注册服务中获取错误?

回答如下:

返回任何结果(结果或错误)时,调用方都认为这是有效的结果。在寄存器功能中,您将同时返回结果和错误!您应该返回结果,但会抛出错误。

try {
    const createdUser = await user.save()
    return createdUser
  } catch (err) {
    throw err
}

甚至您也可以这样做:

const register = async (data) => {
    //hash the password 
    var hashedPassword = bcrypt.hashSync(data.password, 10)
    //create the user
    const user = new User({
        username: data.username,
        email: data.email,
        password: hashedPassword
    });
    return await user.save();
}

单独的注册和登录服务的处理错误

我有一个简单的身份验证系统。我有两个单独的文件用于登录和注册功能。我将在下面提供注册功能。

const User = require('../models/User')
const jwt = require('jsonwebtoken')
const bcrypt = require('bcryptjs')

const register = async (data) => {
    //hash the password 
    var hashedPassword = bcrypt.hashSync(data.password, 10)
     //create the user
    const user = new User({
        username: data.username,
        email: data.email,
        password: hashedPassword
    });
    try {
        const createdUser = await user.save()
        return createdUser
      } catch (err) {
        return err
    }
}
module.exports = register

您可以看到寄存器异步运行,如果一切正常,则返回创建的用户,否则返回错误。以下是使用此服务的路线。

const router = require("express").Router()
const User = require("../../models/User")
const jwt = require('jsonwebtoken')
var bcrypt = require("bcryptjs")
const register = require('../../services/register')
const login = require('../../services/login')
const { registerValidation,loginValidation } = require('../../services/validator')


router.post("/register", async (req, res) => {

  //validate data before creating user
  const { error } = registerValidation(req.body)
  if (error) return res.status(400).send(error.details[0].message)

   //check if user  exisits
   const user = await User.findOne({ email: req.body.email })
   if (user) return res.status(400).send({status:400,message: "User already exists!"})

  //register the user
  try {
    const registerResult = await register(req.body)
    return res.send(registerResult)
  } catch(err) {
    return res.status(500).send({status:500,message:"Something went wrong."})
  }
});
module.exports = router

但是问题是始终等待返回解决,这就是我们使用catch的原因。在Register服务中,一切都很好,它将捕获该错误并将其返回。但是在路由器中:

try {
    const registerResult = await register(req.body)
    return res.send(registerResult)
  } catch(err) {
    return res.status(500).send({status:500,message:"Something went wrong."})
  }

registerResult变量捕获了所有无关紧要的内容,无论是error还是result from resolve我在两个模块中都重复trycatch。我想捕获在创建用户期间发生的任何错误并发送自定义错误。是否有更好的方法可以从注册服务中获取错误?

回答如下:

返回任何结果(结果或错误)时,调用方都认为这是有效的结果。在寄存器功能中,您将同时返回结果和错误!您应该返回结果,但会抛出错误。

try {
    const createdUser = await user.save()
    return createdUser
  } catch (err) {
    throw err
}

甚至您也可以这样做:

const register = async (data) => {
    //hash the password 
    var hashedPassword = bcrypt.hashSync(data.password, 10)
    //create the user
    const user = new User({
        username: data.username,
        email: data.email,
        password: hashedPassword
    });
    return await user.save();
}
发布评论

评论列表 (0)

  1. 暂无评论