Javascript 使用快速验证器验证req.params
我希望用户能够在端点中写入特定的帐号,并尝试验证端点参数(如果它存在于我的数据库中)。我无法让它工作,请问我做错了什么 我的确认 我的AccountNumberList函数 我的帐户档案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) => {
但这总是抛出“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();
});
}