为什么庆祝请求验证失败?

问题描述

我试图从medium复制亚当的例子。

    const app = express();
app.use(expressLogger);
app.use(BodyParser.json());

app.post('/signup',celebrate({
  body: Joi.object().keys({
    name: Joi.string().required(),age: Joi.number().integer(),role: Joi.string().default('admin')
  }),query: {
    token: Joi.string().token().required()
  }
}),(req,res) => {
    logger.debug('Calling res.send');
    res.json({ success: true,data : { name,age,role }});
});

这是错误

 "message": "celebrate request validation Failed","validation": {
        "query": {
            "source": "query","keys": [
                "token"
            ],"message": "\"token\" is required"

        }

邮递员POST请求

{
    'name' : 'John J.','age' : 23,}

我将令牌设置为参数,现在可以正常工作。 我现在出现参考错误

<body>
    <pre>ReferenceError: name is not defined<br>

这是简单的示例。这就是Pino记录器显示内容

err":{"type":"Error","message":"Failed with status code 500","stack":"Error: Failed with status code 500\n    at ServerResponse.onResFinished (/home/trajche/pract/joi1/node_modules/pino-http/logger.js:73:38)\n    at ServerResponse.emit (events.js:326:22)\n    at onFinish (_http_outgoing.js:751:10)\n    at callback (_stream_writable.js:501:21)\n    at afterWrite (_stream_writable.js:454:5)\n    at afterWriteTick (_stream_writable.js:441:10)\n    at processticksAndRejections (internal/process/task_queues.js:79:21)"},"responseTime":3,"msg":"request errored"}
ReferenceError: name is not defined

解决方法

当您尝试使用res.json({ success: true,data : { name,age,role }});返回数据时,未定义变量nameagerole。您需要先从请求正文中检索它们。

res.json({ success: true,data : { name: req.body.name,age: req.body.age,role: req.body.role }});

也许是更好的方法

const { name,role } = req.body;
res.json({ success: true,role }});