Я создаю аутентификацию NodeJS / Express и пытаюсь выполнить async / await (попробовать / поймать), мой регистрационный маршрут работает идеально, прежде чем я добавлю свою проверку. Проблема в том, что мой валидатор (на основе валидатора) работает, отправляет ошибки, как и ожидалось, но когда у меня есть правильные данные для регистрации пользователя. Почтальон возвращает мне пустой предмет. ошибок нет. Я предполагаю, что этот try / catch работает иначе, чем .then (), который я использовал раньше.
С уважением
auth.js зарегистрировать маршрут
const db = require('../models')
const validateRegisterInput = require('../validation/register')
exports.register = async (req, res, next) => {
const {
errors,
isValid
} = validateRegisterInput(req.body)
if (!isValid) {
return res.status(400).json(errors)
}
try {
const user = await db.User.create(req.body)
const {
id,
username
} = user
res.json({
id,
username
})
} catch (error) {
return next(error)
}
}
проверка регистрации
const validator = require('validator')
const isEmpty = require('./is-empty')
const validateRegisterInput = (data) => {
let errors = {}
data.username = !isEmpty(data.username) ? data.username : ''
data.password = !isEmpty(data.password) ? data.password : ''
if (!validator.isLength(data.username, {
min: 2,
max: 30
})) {
errors.username = 'Username should be between 2 and 30 characters'
}
if (validator.isEmpty(data.username)) {
errors.username = 'Username is required'
}
if (validator.isEmpty(data.password)) {
errors.password = 'Password is required'
}
if (!validator.isLength(data.password, {
min: 6,
max: 30
})) {
errors.password = 'Password should be at least 6 characters'
}
return {
errors,
isValid: isEmpty(errors)
}
}
module.exports = validateRegisterInput
пустой
const isEmpty = (value) => {
value === undefined ||
value === null ||
(typeof value === 'object' && Object.keys(value).length === 0) ||
(typeof value === 'string' && value.trim().length === 0)
}
module.exports = isEmpty
добавлено пусто, я добавил это, потому что валидатор принимает только строки
@JonasWilms Я не уверен, что это функция стрелки; если вы не вернетесь из какой-либо функции, у вас будет такая же проблема.
@paul мне кажется, что OP думал, что функция стрелки неявно оценивает выражение ...
Возможно, @JonasWilms, но, как я уже сказал, это также может быть просто ошибка, не имеющая ничего общего со стрелочными функциями



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В isEmpty отсутствует возврат, поэтому всегда возвращается undefined, который будет иметь значение false.
Или - вместо добавления return вы, конечно, можете удалить фигурные скобки {...}
Не могли бы вы показать свою функцию
isEmpty?