Javascript 请求时参数不正确。Express/dynamodb/passport脚本中的callListeners

Javascript 请求时参数不正确。Express/dynamodb/passport脚本中的callListeners,javascript,node.js,amazon-web-services,express,amazon-dynamodb,Javascript,Node.js,Amazon Web Services,Express,Amazon Dynamodb,因为我还没有发现这个与dynamodb和passport相关的错误,所以我真的很想打开这篇文章。当我尝试使用节点脚本登录时,此错误会使整个Express应用程序崩溃 ~/node_modules/aws-sdk/lib/request.js:31 throw err; ^ Error: Incorrect arguments at Request.callListeners ~/node_modules/aws-sdk/lib/sequen

因为我还没有发现这个与dynamodb和passport相关的错误,所以我真的很想打开这篇文章。当我尝试使用节点脚本登录时,此错误会使整个Express应用程序崩溃

~/node_modules/aws-sdk/lib/request.js:31
        throw err;
        ^

           Error: Incorrect arguments
at Request.callListeners ~/node_modules/aws-sdk/lib/sequential_executor.js:107:43)
at Request.emit ~/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit ~/node_modules/aws-sdk/lib/request.js:673:14)
at Request.transition (~/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (~/node_modules/aws-sdk/lib/state_machine.js:14:12)
at ~/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (~/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (~/node_modules/aws-sdk/lib/request.js:675:12)
at Request.callListeners (~/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
at Request.emit (~node_modules/aws-sdk/lib/sequential_executor.js:77:10)
~/node\u modules/aws sdk/lib/request.js:31
犯错误;
^
错误:参数不正确
at Request.callListeners~/node_modules/aws sdk/lib/sequential_executor.js:107:43)
at Request.emit~/node_modules/aws sdk/lib/sequential_executor.js:77:10)
at Request.emit~/node_modules/aws sdk/lib/Request.js:673:14)
at Request.transition(~/node\u modules/aws sdk/lib/Request.js:22:10)
在AcceptorStateMachine.runTo(~/node\u modules/aws sdk/lib/state\u machine.js:14:12)
在~/node_modules/aws sdk/lib/state_machine.js:26:10
应要求。(~/node_modules/aws sdk/lib/request.js:38:9)
应要求。(~/node_modules/aws sdk/lib/request.js:675:12)
at Request.callListeners(~/node\u modules/aws sdk/lib/sequential\u executor.js:115:18)
at Request.emit(~node_modules/aws sdk/lib/sequential_executor.js:77:10)
这是我认为查询导致错误的注册脚本:

const LocalStrategy = require("passport-local").Strategy;
const bCrypt = require("bcrypt-nodejs");

const AWS = require("aws-sdk");
const dynamodb = new AWS.DynamoDB({
  apiVersion: "2012-08-10",
  //testing purposes
   "region": "us-west-2",
  "accessKeyId": "abcde",
  "secretAccessKey": "abcde",  
  "endpoint": "http://localhost:8001"
});

module.exports = function(passport) {

  passport.use("login", new LocalStrategy({
      passReqToCallback: true
    },
    function(req,username,password,done) {
      var queryParams = {
    TableName: "users",
    KeyConditionExpression: "username = :user",
    ExpressionAttributeValues: {
      //username entered in jade form
      ":user":{"S":username}
           }
      };
      //querying dynamodb for username
      dynamodb.query(queryParams,
    function(err,user) {
      if(err) {
        console.error(username);
        console.error(err);
        return done(err);
      }
      //if no users with said username in db
      if(user.Count < 1) {
        console.error("user: " + username + " not found in db");
        return done(null, false, req.flash("message" , "user not found"));
      }
      //too many entries (admin's fault)
      if(user.Count > 1){
        console.error("error, more than one user with " + username + " in db");
        return done(null,false,req.flash("message", "more than version of the username in the db"));
      } else {
        //only one user exists in db, query for username was successful
        user.Items.forEach(function(item){

        //checking if entered password is wrong
        if(!isValidPassword(item.username, item.password)) {
        console.error("invalid username - password combination");
        return done(null,false,req.flash("message","invalid user-password combination")); 
           }


      //passwortcheck wird gar nicht ausgeführt - query returnt noch nicht die richtigen Ergebnisse
      //successful login - user and password match
      console.log("login successful");
      console.log(user.username); //undefined
      console.log(user.password); //undefined
      console.log(user);
      //return user object for serialization
      return done(null,user);
      });
     }
    });  

      //passport serialization to support persitent login sessions
  passport.serializeUser(function(user,done){
    console.log("serializing user: " + user);
    done(null, user.id);
  });

  passport.deserializeUser(function(id,done){
    User.findById(id, function(err, user) {
      console.log("deserializing user: " + user);
      done(err,user);
    });
  });
  }
));


  var isValidPassword = function(user, password) {
    return bCrypt.compareSync(password,user.password);
  }
}
const LocalStrategy=require(“passport local”)。策略;
常量bCrypt=require(“bCrypt节点”);
const AWS=要求(“AWS sdk”);
const dynamodb=新的AWS.dynamodb({
apiVersion:“2012-08-10”,
//测试目的
“地区”:“美国西部2号”,
“accessKeyId”:“abcde”,
“secretAccessKey”:“abcde”,
“端点”:http://localhost:8001"
});
module.exports=函数(passport){
passport.use(“登录”,新的本地策略({
passReqToCallback:true
},
函数(请求、用户名、密码、完成){
变量queryParams={
TableName:“用户”,
KeyConditionExpression:“用户名=:用户”,
表达式属性值:{
//以jade表单输入的用户名
“:user”:{“S”:username}
}
};
//查询dynamodb中的用户名
dynamodb.query(查询参数,
函数(错误,用户){
如果(错误){
控制台错误(用户名);
控制台错误(err);
返回完成(err);
}
//如果数据库中没有使用上述用户名的用户
如果(user.Count<1){
控制台。错误(“在数据库中找不到用户:“+username+”);
返回完成(null、false、req.flash(“消息”、“未找到用户”);
}
//条目过多(管理员的错误)
如果(user.Count>1){
console.error(“错误,多个用户在db中使用“+username+”);
返回完成(null、false、req.flash(“消息”、“数据库中用户名的多个版本”);
}否则{
//数据库中只存在一个用户,用户名查询成功
user.Items.forEach(函数(项){
//检查输入的密码是否错误
如果(!isValidPassword(item.username,item.password)){
控制台错误(“无效的用户名-密码组合”);
返回完成(null、false、req.flash(“消息”、“无效用户密码组合”);
}
//passwortcheck wird gar nicht ausgeführt-查询返回的结果不符合要求
//成功登录-用户和密码匹配
console.log(“登录成功”);
console.log(user.username);//未定义
console.log(user.password);//未定义
console.log(用户);
//返回用于序列化的用户对象
返回完成(空,用户);
});
}
});  
//passport序列化以支持持续登录会话
passport.user(函数(user,done){
日志(“序列化用户:+user”);
完成(null,user.id);
});
passport.deserializeUser(函数(id,完成){
findById(id,函数(err,User){
log(“反序列化用户:+user”);
完成(错误,用户);
});
});
}
));
var isValidPassword=函数(用户、密码){
返回bCrypt.compareSync(密码、用户密码);
}
}

Hi,我认为端点导致了一些问题。你可能想检查一下。似乎是由bcrypt而不是aws sdk抛出的。在他们的Github中打开了一个问题,他们怀疑它是由bcrypt抛出的。