В настоящее время изучают NodeJS и Nuxt. Я надеюсь полностью понять цикл отправки объекта с клиента (интерфейс) на сервер (сервер) и затем получить ответ.
Например, я sh для отправки простой объект регистрации:
registerInfo: {
username: '',
email: '',
password: ''
}
Этот объект отправляется с помощью действия Vuex:
async register (vuexContext, registerInfo) {
try {
const response = await axios.post('/register', registerInfo)
console.log(response)
} catch (err) {
console.log(err)
}
}
Маршрутизатор (серверная часть работает в Express) получает запрос и вызывает соответствующая функция в файле контроллера:
router.post('/register', userController.register)
Функция файла контроллера выглядит следующим образом:
exports.register = async (req, res) => {
const user = new User(req.body)
try {
await user.save()
res.send({ user })
} catch (err) {
res.sendStatus(404).send(err)
}
}
Я хотел показать все шаги для моего вопроса. Допустим, мы отправили пустой объект (в форме в интерфейсе не было введено никаких значений), а схема Mon goose (код для этого ниже) указывает, что все поля являются обязательными.
Когда mon goose собирается сохранить в базе данных, он проходит через схему и выдает ошибку (ie: «Требуется имя пользователя»), которая вызывает код блока catch. В котором я хочу отправить обратно клиенту статус 404. Но наряду с этим я также хочу отправить объект ошибки.
Однако вот что я вижу на интерфейсной консоли:
Не включает объект ошибки ( да, в коде выше я его не включал, однако .send (err) тоже не работает). Кроме того, я могу выполнить весь этот процесс в блоке try, проверив объект response на наличие свойства error . Но я чувствую, что это хакерство и не «дурак» Я младший разработчик, поэтому я могу быть совершенно неправ в этом отношении.
У кого-нибудь есть понимание моей проблемы?
Спасибо,
const UserSchema = new mongoose.Schema({
username: {
type: String,
minlength: [3, 'Username must be at least 3 characters long'],
required: [true, 'Username is required'],
unique: [true, 'Username already exists.']
},
email: {
type: String,
required: [true, 'Email is required'],
unique: [true, 'Email already exists.']
},
password: {
type: String,
minlength: [5, 'Password must be at least 5 characters long.'],
}
})