单独的注册和登录服务的处理错误
我有一个简单的身份验证系统。我有两个单独的文件用于登录和注册功能。我将在下面提供注册功能。
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
我在两个模块中都重复try
和catch
。我想捕获在创建用户期间发生的任何错误并发送自定义错误。是否有更好的方法可以从注册服务中获取错误?
返回任何结果(结果或错误)时,调用方都认为这是有效的结果。在寄存器功能中,您将同时返回结果和错误!您应该返回结果,但会抛出错误。
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
我在两个模块中都重复try
和catch
。我想捕获在创建用户期间发生的任何错误并发送自定义错误。是否有更好的方法可以从注册服务中获取错误?
返回任何结果(结果或错误)时,调用方都认为这是有效的结果。在寄存器功能中,您将同时返回结果和错误!您应该返回结果,但会抛出错误。
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();
}