【发布时间】: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