У меня проблема с приведенным ниже сценарием после обновления Joi v13 до ^ 17. В документации Joi говорится, что Joi.validate устарела, и нужно использовать schema.validate, но это также не работает для меня. Почтальон просто зависает, пока мне не придется отменить запрос вручную. Ниже приведен код при отправке запроса на создание пользователя:
const Joi = require("@hapi/joi");
const HttpStatus = require("http-status-codes");
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const User = require("../models/userModels");
const Helpers = require("../Helpers/helpers");
const dbConfig = require("../config/secret");
module.exports = {
async CreateUser(req, res) {
const schema = Joi.object().keys({
username: Joi.string()
.min(5)
.max(10)
.required(),
email: Joi.string()
.email()
.required(),
password: Joi.string()
.min(5)
.required()
});
const { error, value } = schema.validate(req.body, schema);
if (error && error.details) {
return res.status(HttpStatus.BAD_REQUEST).json({ msg: error.details });
}
const userEmail = await User.findOne({
email: Helpers.lowerCase(req.body.email)
});
if (userEmail) {
return res
.status(HttpStatus.CONFLICT)
.json({ message: "Email already exist" });
}
const userName = await User.findOne({
username: Helpers.firstUpper(req.body.username)
});
if (userName) {
return res
.status(HttpStatus.CONFLICT)
.json({ message: "Username already exist" });
}
return bcrypt.hash(value.password, 10, (err, hash) => {
if (err) {
return res
.status(HttpStatus.BAD_REQUEST)
.json({ message: "Error hashing password" });
}
const body = {
username: Helpers.firstUpper(value.username),
email: Helpers.lowerCase(value.email),
password: hash
};
User.create(body)
.then(user => {
const token = jwt.sign({ data: user }, dbConfig.secret, {
expiresIn: "5h"
});
res.cookie("auth", token);
res
.status(HttpStatus.CREATED)
.json({ message: "User created successfully", user, token });
})
.catch(err => {
res
.status(HttpStatus.INTERNAL_SERVER_ERROR)
.json({ message: "Error occured" });
});
});
}
};
И вывод сервера:
(узел: 8787) UnhandledPromiseRejectionWarning: Ошибка: неверные параметры сообщения при новый module.exports (/Users/Username/chatapp/node_modules/@hapi/hoek/lib/error.js:23:19) в module.exports (/ Users / Имя пользователя / chatapp / node_modules / @ hapi / hoek / lib / assert. js: 20: 11) в Object.exports.compile (/Users/Username/chatapp/node_modules/@hapi/joi/lib/messages.js:30:5) в Object.exports. настройки (/Users/Username/chatapp/node_modules/@hapi/joi/lib/common.js:162:36) в Object.exports.entry (/ Пользователи / Имя пользователя / chatapp / node_modules / @ hapi / joi / lib /validator.js:23:27) в internals.Base.validate (/Users/Username/chatapp/node_modules/@hapi/joi/lib/base.js:536:26) в CreateUser ( /Users/Username/chatapp/controllers/auth.js:25:37) в Layer.handle [as handle_request] (/Users/Username/chatapp/node_modules/express/lib/router/layer.js: 95: 5) на следующем (/ Users /Username/chatapp/node_modules/express/lib/router/route.js:137:13) в Route.dispatch (/Users/Username/chatapp/node_modules/express/lib/router/route.js:112 : 3) в Layer.handle [as handle_request] (/Users/Username/chatapp/node_modules/express/lib/router/layer.js:95:5) в / Users / Имя пользователя / chatapp / node_modules / express / lib /router/index.js:281:22 в Function.process_params (/Users/Username/chatapp/node_modules/express/lib/router/index.js:335:12) в следующем (/ Users / Username / chatapp / node_modules / express / lib / router / index. js: 275: 10) в Function.handle (/Users/Username/chatapp/node_modules/express/lib/router/index.js:174:3) в маршрутизаторе (/Users/Username/chatapp/node_modules/express/lib/router/index.js:47:12) (узел: 8787) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). Чтобы завершить процесс узла при отклонении необработанного обещания, используйте флаг CLI --unhandled-rejections=strict
(см. https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (идентификатор отклонения: 1) (узел: 8787) [DEP0018] Предупреждение об устаревании: отклонения необработанного обещания устарели. В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения.
Сценарий можно найти по ссылке ниже: Github