UnhandledPromiseRejection: Error: Invalid message options with Joi
UnhandledPromiseRejection: Error: Invalid message options with Joi
我收到无效的错误消息。我尝试了很多东西,但没有任何效果。 Joi 文档声明 Joi.validate 已弃用,应该使用 schema.validate 但这对我不起作用 either.Postman 只是挂起,直到我必须手动取消请求。下面是发出 post 创建用户请求时的代码:
const { registervalidation } = require('../validation');
router.post('/register', async (req, res) => {
//LETS VALIDATE
const validation = registervalidation(req.body);
if(error) return res.status(400).send(error.details);
const users = new User ({
name: req.body.name,
email: req.body.email,
password: req.body.password
});
try{
const usersave = await users.save();
res.send(usersave);
}
catch(err){
res.status(400).send(err);
console.log(err);
}
});
joi 模式如下所示..
const Joi = require('joi');
const registervalidation = data =>{
const schema = Joi.object({
name: Joi.string()
.alphanum()
.min(6)
.max(30)
.required()
.error(new Error('I am a custom error and I know it!')),
email: Joi.string()
.email({minDomainSegments: 2, tlds: { allow: ['com', 'net'] } })
.required()
.error(new Error('I am a custom error and I know it!')),
password: Joi.string()
.min(6)
.required()
.error(new Error('I am a custom error and I know it!'))
})
return schema.validate(data, schema);
};
它抛出错误..
(node:17752) UnhandledPromiseRejectionWarning: Error: Invalid message options
at new module.exports (D:\Projects\web\jwt\node_modules\@hapi\hoek\lib\error.js:23:19)
at module.exports (D:\Projects\web\jwt\node_modules\@hapi\hoek\lib\assert.js:20:11)
at Object.exports.compile (D:\Projects\web\jwt\node_modules\joi\lib\messages.js:30:5)
at Object.exports.preferences (D:\Projects\web\jwt\node_modules\joi\lib\common.js:165:36)
at Object.exports.entry (D:\Projects\web\jwt\node_modules\joi\lib\validator.js:24:27)
at internals.Base.validate (D:\Projects\web\jwt\node_modules\joi\lib\base.js:548:26)
at registervalidation (D:\Projects\web\jwt\validation.js:23:19)
at D:\Projects\web\jwt\routes\auth.js:9:25
at Layer.handle [as handle_request] (D:\Projects\web\jwt\node_modules\express\lib\router\layer.js:95:5)
at next (D:\Projects\web\jwt\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (D:\Projects\web\jwt\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (D:\Projects\web\jwt\node_modules\express\lib\router\layer.js:95:5)
at D:\Projects\web\jwt\node_modules\express\lib\router\index.js:281:22
at Function.process_params (D:\Projects\web\jwt\node_modules\express\lib\router\index.js:335:12)
at next (D:\Projects\web\jwt\node_modules\express\lib\router\index.js:275:10)
at Function.handle (D:\Projects\web\jwt\node_modules\express\lib\router\index.js:174:3)
(node:17752) UnhandledPromiseRejectionWarning: Unhandled promise rejection.
This error originated either by throwing inside of an async function without
a catch block, or by rejecting lock, or by rejecting a promise which was not
handled with .catch(). To terminate the node process on unhandled promise
rejection, use the CLI flag `--unhandled-r
https://nodejs.org/apejections=strict` (see
https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection
id: 1)
(node:17752) [DEP0018] DeprecationWarning: Unhandled promise rejections are
deprecated. In the future, promise rejections that are not handled will
terminate
the Node.js process with a
Node.js process with a non-zero exit code.
您的代码中有几个错误:
-- 您没有正确验证您的模式:
schema.validate(data, schema);
应该是:
schema.validate(data);
check out .validate documentation for more information
-- 这不是您捕获验证错误的方式:
const validation = registervalidation(req.body);
if(error) return res.status(400).send(error.details);
错误根本不存在,应该是
if(validation.error) {
}
-- 你的 try 应该放在函数的顶部:
router.post('/register', async (req, res) => {
try {
} catch (err) {
}
})
-- 而且,我不确定您是否正确导出 registervalidation,但它应该是:
module.exports = { registervalidation }
我收到无效的错误消息。我尝试了很多东西,但没有任何效果。 Joi 文档声明 Joi.validate 已弃用,应该使用 schema.validate 但这对我不起作用 either.Postman 只是挂起,直到我必须手动取消请求。下面是发出 post 创建用户请求时的代码:
const { registervalidation } = require('../validation');
router.post('/register', async (req, res) => {
//LETS VALIDATE
const validation = registervalidation(req.body);
if(error) return res.status(400).send(error.details);
const users = new User ({
name: req.body.name,
email: req.body.email,
password: req.body.password
});
try{
const usersave = await users.save();
res.send(usersave);
}
catch(err){
res.status(400).send(err);
console.log(err);
}
});
joi 模式如下所示..
const Joi = require('joi');
const registervalidation = data =>{
const schema = Joi.object({
name: Joi.string()
.alphanum()
.min(6)
.max(30)
.required()
.error(new Error('I am a custom error and I know it!')),
email: Joi.string()
.email({minDomainSegments: 2, tlds: { allow: ['com', 'net'] } })
.required()
.error(new Error('I am a custom error and I know it!')),
password: Joi.string()
.min(6)
.required()
.error(new Error('I am a custom error and I know it!'))
})
return schema.validate(data, schema);
};
它抛出错误..
(node:17752) UnhandledPromiseRejectionWarning: Error: Invalid message options
at new module.exports (D:\Projects\web\jwt\node_modules\@hapi\hoek\lib\error.js:23:19)
at module.exports (D:\Projects\web\jwt\node_modules\@hapi\hoek\lib\assert.js:20:11)
at Object.exports.compile (D:\Projects\web\jwt\node_modules\joi\lib\messages.js:30:5)
at Object.exports.preferences (D:\Projects\web\jwt\node_modules\joi\lib\common.js:165:36)
at Object.exports.entry (D:\Projects\web\jwt\node_modules\joi\lib\validator.js:24:27)
at internals.Base.validate (D:\Projects\web\jwt\node_modules\joi\lib\base.js:548:26)
at registervalidation (D:\Projects\web\jwt\validation.js:23:19)
at D:\Projects\web\jwt\routes\auth.js:9:25
at Layer.handle [as handle_request] (D:\Projects\web\jwt\node_modules\express\lib\router\layer.js:95:5)
at next (D:\Projects\web\jwt\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (D:\Projects\web\jwt\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (D:\Projects\web\jwt\node_modules\express\lib\router\layer.js:95:5)
at D:\Projects\web\jwt\node_modules\express\lib\router\index.js:281:22
at Function.process_params (D:\Projects\web\jwt\node_modules\express\lib\router\index.js:335:12)
at next (D:\Projects\web\jwt\node_modules\express\lib\router\index.js:275:10)
at Function.handle (D:\Projects\web\jwt\node_modules\express\lib\router\index.js:174:3)
(node:17752) UnhandledPromiseRejectionWarning: Unhandled promise rejection.
This error originated either by throwing inside of an async function without
a catch block, or by rejecting lock, or by rejecting a promise which was not
handled with .catch(). To terminate the node process on unhandled promise
rejection, use the CLI flag `--unhandled-r
https://nodejs.org/apejections=strict` (see
https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection
id: 1)
(node:17752) [DEP0018] DeprecationWarning: Unhandled promise rejections are
deprecated. In the future, promise rejections that are not handled will
terminate
the Node.js process with a
Node.js process with a non-zero exit code.
您的代码中有几个错误:
-- 您没有正确验证您的模式:
schema.validate(data, schema);
应该是:
schema.validate(data);
check out .validate documentation for more information
-- 这不是您捕获验证错误的方式:
const validation = registervalidation(req.body);
if(error) return res.status(400).send(error.details);
错误根本不存在,应该是
if(validation.error) {
}
-- 你的 try 应该放在函数的顶部:
router.post('/register', async (req, res) => {
try {
} catch (err) {
}
})
-- 而且,我不确定您是否正确导出 registervalidation,但它应该是:
module.exports = { registervalidation }