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

Javascript 使用快速验证器验证req.params,javascript,api,express,endpoint,express-validator,Javascript,Api,Express,Endpoint,Express Validator,我希望用户能够在端点中写入特定的帐号,并尝试验证端点参数(如果它存在于我的数据库中)。我无法让它工作,请问我做错了什么 我的确认 我的AccountNumberList函数 我的帐户档案 但这总是抛出“Account Number not found”错误,即使req.param存在于我的帐户数据库中。参数由express中间件解析为字符串。假设我对下面定义的路径进行req,如/some/1000 app.get('/some/:path', (req, res, next) => {

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

我的确认

我的AccountNumberList函数

我的帐户档案


但这总是抛出“Account Number not found”错误,即使req.param存在于我的帐户数据库中。

参数由express中间件解析为
字符串。假设我对下面定义的路径进行req,如
/some/1000

app.get('/some/:path', (req, res, next) => {
  console.log(typeof req.param.path)
  // outputs string
})
因此,您需要将传入参数解析为整数(Number),因为您已将
accountNumber
存储为整数。因此,将
toInt
添加到下面这样的链中应该可以解决这个问题:

const validateReq: [
  param('accountNumber').exists().toInt().custom(acctNo => accountNumberExist(acctNo)),
]

accounts数组中的accountNumber是一个数字,而req.params.accountNumber是一个字符串。您需要转换数据类型。你可以照我说的做

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

我认为问题在于你的质疑
find
方法以异步方式运行,这就是为什么
isfind
属性不包含所需的数据。这里有一个简单的方法,使用
承诺
,对我来说效果很好

// Here is your function.
accountNumberExist(inputAcct) {
    return accounts.find({accountNumber: inputAcct})
    .then(result => {
        if (result.length == 0) {
            console.log("Account Number not found");
            return Promise.reject('Account Number not found');
        }
        return Promise.resolve();
    });

}

OP使用普通数组。不涉及异步内容。@gustavohenke这段代码的问题在哪里?如上所述,官方文档也建议使用普通数组,上面提到的
.find()
Array.prototype.find
——不是某种DB查询或API调用。作为express validator维护者:这将是解决此问题的首选方法;)如果我在param和body中有值呢?例如:重置密码->我们在参数上传递重置密码令牌,并在正文中发送电子邮件。我们如何处理这种情况?那么我们在这里使用这个sh***validateReq变量?
const validateReq: [
  param('accountNumber').exists().toInt().custom(acctNo => accountNumberExist(acctNo)),
]
    accountNumberExist(inputAcct) {
        const isfound = accounts.find(account => account.accountNumber.toString() === inputAcct);
        if (isfound === undefined) throw new Error('Account Number not found');
  }
// Here is your function.
accountNumberExist(inputAcct) {
    return accounts.find({accountNumber: inputAcct})
    .then(result => {
        if (result.length == 0) {
            console.log("Account Number not found");
            return Promise.reject('Account Number not found');
        }
        return Promise.resolve();
    });

}