我正在调用API中的存储过程,创建一个简单的注册/登录系统。
db.executeQueryWithParams(config.storedProcedures.CheckEmail, email, (err, result) => {
if (err) {
console.log(err);
} else {
console.log("succeeded - ", result);
;
}
});
这"ExecuteQueryWithParams"是一个标准的功能,我已经交给,是在与数据库结合使用。我在代码的其他地方有一个工作版本,我将用户信息插入到数据库中,因此我知道这不是函数本身的问题。为清楚起见,下面是函数:
executeQueryWithParams(storedProc, params, callback) {
var request = this.getRequest();
for (var key in params) {
request.input(key, params[key]);
}
this.executeRequest(request, storedProc, callback);
}
这是被调用的存储过程:
ALTER PROCEDURE [dbo].[sp_CheckEmail]
@email varchar(255)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT * from [TABLE] WHERE email = @email
END
然而,当调用存储过程时,我得到一个错误,我向过程传递了太多的参数。我正在从API请求中获取电子邮件参数,并且我只传递电子邮件地址,例如"example.email@gmail.com">
具体来说,错误显示为"RequestError:过程或函数sp_CheckEmail有太多指定的参数。">
我确信我只向存储过程传递了一个必需的参数,但是我不明白为什么它告诉我有太多的参数。
我已经尝试了不同的格式,以确保它不是由于电子邮件地址或任何特殊字符可能导致的问题。即使我只是使用一个简单的字符串,比如一个名字,它仍然给我这个问题。我还通过创建更多参数(最多5个)进行了测试,看看这是否能以某种方式满足我所遇到的错误。
for...in
上的字符串(email
)是您这里的问题
const params = "test@test.com"
for (var key in params) {
console.log(key, params[key]);
}
您的代码将尝试为您的电子邮件中的每个字符添加一个参数到您的存储过程。
您的for
将循环遍历字符串中的所有字符。相反,传入一个具有email
db.executeQueryWithParams(config.storedProcedures.CheckEmail, {email: email}, (err, result) => {
...