У вас есть два варианта: проверить, существует ли электронное письмо до создания (лучший вариант) или разрешить Mongo выдавать error object
во время создания пользователя, преобразовать его в string
и затем проверить, включает ли это string
E11000
.
Рабочий пример : https://github.com/mattcarlotta/fullstack-mern-kit (нажмите здесь , чтобы просмотреть используемый код, как описано ниже; кроме того, приведенный ниже код относитсяк статическому методу пользователя, который вы можете найти здесь )
Например (выберите один вариант, вам не нужны оба):
const createUser = async (req, res, done) => {
const {
email,
firstName,
lastName,
userName,
backgroundInfo,
address,
} = req.body;
if (
!email
|| !firstName
|| !lastName
|| !userName
|| !backgroundInfo
|| isEmpty(address)
) return res.status(400).json({ err: “You must include all required fields to create a new user!” }); // checking if the req.body contains all the required user fields
try {
const emailTaken = await User.findOne({ email });
if (emailTaken) return res.status(400).json({ err: “That email is already in use!" }); // checking if the user exists before creation
await User.createUser(req.body); // createUser is a custom static method placed on the model
res
.status(201)
.json({ message: `Successfully created ${req.body.userName}.` });
} catch (err) {
const errString = err.toString();
if (errString.includes("E11000")) return res.status(400).json({ err: “That email is already in use!" }); // handling the error Mongo throws if the user exists during creation
return res.status(400).json({ err: errString }); // handling any other misc errors
}
};
По умолчанию axios
не возвращает ошибку с сервера.Вместо этого вам нужно будет создать пользовательскую конфигурацию axios
: axiosConfig.js .Наиболее важной частью этой конфигурации является изменение ошибки interceptor
, как показано здесь .Это специально ищет ошибку от error.response.data.err
.Если вы не используете err
для API, вам нужно обновить эту строку .
Цель этой строки - проверить, существует ли error.response.data.err
, если нет, то он возвращает общее Network Error
(error.message
) сообщение.
После того, как вы создали эту конфигурацию, вам нужно будет использовать ее для всего приложения (import axios from '../path/to/axiosConfig'
).
ПРИМЕЧАНИЕ : обновите baseURL до вашего API localhost
, и оно будет port
.Преимущество использования этой конфигурации заключается в том, что к любым вызовам, которые вы делаете с помощью axios
, будет добавляться http://localhost:port/
.
Например, вместо:
axios.get("http://localhost:5000/api/user")
это будет:
axios.get("user")
Если у вас есть вопросы, прежде чем спрашивать, пожалуйста, обратитесь к репозиторию github выше, поскольку он показывает, как интегрировать все.Если вы планируете использовать это в производственной среде, вам нужно будет использовать ENV (в этом примере используется пакет better-npm-run , но вы можете использовать cross-env или dotenv ).