使用快速验证器验证 req.params

Pel*_*umi 2 javascript api endpoint express express-validator

我希望用户能够在端点中写入特定的帐号,并尝试验证端点参数是否存在于我的数据库中。我无法让它工作,请问我做错了什么?

我的验证

const validateReq: [
param('accountNumber').exists().custom(acctNo => accountNumberExist(acctNo)),]
Run Code Online (Sandbox Code Playgroud)

我的 accountNumberExist 函数

    accountNumberExist(inputAcct) {
    const isfound = accounts.find(account => account.accountNumber === inputAcct);
    if (isfound === undefined) throw new Error('Account Number not found');
  }
Run Code Online (Sandbox Code Playgroud)

我的账户档案

    const accounts = [
  {
    id: 1,
    accountNumber: 1234567890,
    createdOn: new Date(),
    owner: 1,
    type: 'current',
    balance: 23444.43,
    status: 'active',
  },
  {
    id: 2,
    accountNumber: 1234167890,
    createdOn: new Date(),
    owner: 1,
    type: 'savings',
    balance: 2233444.43,
    status: 'active',
  },
  {
    id: 3,
    accountNumber: 9987654321,
    createdOn: new Date(),
    owner: 2,
    type: 'saving',
    balance: 73444.43,
    status: 'active',
  },
];
Run Code Online (Sandbox Code Playgroud)

但这总是抛出“找不到帐号”错误,即使 req.param 存在于我的帐户数据库中。

156*_*223 8

参数string由 express 中间件解析。假设我对下面定义的路径进行了请求,例如/some/1000

app.get('/some/:path', (req, res, next) => {
  console.log(typeof req.param.path)
  // outputs string
})
Run Code Online (Sandbox Code Playgroud)

因此,您需要将传入参数解析为整数 (Number),因为您已将其存储accountNumber为整数。所以添加toInt到像下面这样的链应该可以解决它:

const validateReq: [
  param('accountNumber').exists().toInt().custom(acctNo => accountNumberExist(acctNo)),
]
Run Code Online (Sandbox Code Playgroud)

  • 作为快速验证器维护者:这将是解决此问题的首选方法;) (7认同)