【问题标题】:Validate a header parameter with Joi, nodejs?使用 Joi、nodejs 验证标头参数?
【发布时间】:2021-03-29 18:32:14
【问题描述】:

我想检查 HTTP 请求标头的一个参数(在本例中为 docsLimit)。所以我这样做了:

const {
  celebrate,
  Joi,
} = require('celebrate');
const joiObjectId = require('joi-objectid');

Joi.objectId = joiObjectId(Joi);

const limit = celebrate({
  headers: Joi.object().keys({
    docsLimit: Joi.number()
      .required()
      .default(10),
  }).options({ allowUnknown: true })
});

module.exports = limit;

在 app.js 中:

app.get(path, limit, getDocuments);

我不得不说我是 nodejs 的新手,尤其是 Joi,但这对我来说似乎很有意义。相反,这是错误的,因为如果我在标题中发送一个字符串,它无论如何都会接受它,即使我将它精确为一个数字。如果我删除 .options({ allowUnknown: true }) 那么它永远不会通过,即使有一个数字。它说“UnhandledPromiseRejectionWarning:错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头”并返回一个 json,说明“不允许限制”。用 Joi 检查标头中的参数的方法是什么?

非常感谢!

【问题讨论】:

  • 标题总是字符串?你能告诉我们你到底要寄什么吗?
  • @Bergi 谢谢!问题是标题总是一个字符串,所以我不应该做 Joi.number()。我使用 Joi.string() 并使用正则表达式进行检查以便成为一个数字。之后,我在使用它之前将其转换为数字!非常感谢!!

标签: javascript node.js joi


【解决方案1】:

问题是标题总是一个字符串,所以我不应该做 Joi.number()。我应该使用 Joi.string() ,然后,我用正则表达式检查以便成为一个数字。最后我把它转换成数字再使用!

【讨论】:

    猜你喜欢
    • 2015-09-25
    • 2022-01-25
    • 2016-05-09
    • 2020-01-19
    • 2019-12-01
    • 2013-11-29
    • 2016-05-08
    • 1970-01-01
    • 2020-09-05
    相关资源
    最近更新 更多