代码之家  ›  专栏  ›  技术社区  ›  user8871219

在NodeJ中的函数之间传递变量

  •  1
  • user8871219  · 技术社区  · 8 年前

    我在关注这个( YouTube Link )因为我必须为朋友开发一个web应用程序。他需要使用Dynamo DB和node js,我在构建这个应用程序的过程中学习,我做得很好,但现在我被卡住了。

    router.post('/authenticate', (req, res, next) => {
      const username = req.body.username;
      const password = req.body.password;
    
      USER.getUserByUsername(username, (err, user) => {
        if (err) throw err;
        if (!user) {
          return res.json({
            success: false,
            "msg": "User not found"
          });
        }
        User.comparePassword(password, user.password, (err, isMatch) => {
          if (err) throw err;
          if (isMatch) {
            const token = jwt.sign(user, secret.secret, {
              expiresIn: 86400
            });
            res.json({
              success: true,
              token: 'JWT ' + token,
              user: {
                user: user.username,
                password: user.password,
                email: USER.email
              }
            });
          }
        });
      });
    });
    

    这是护照js码

    module.exports = function (passport) {
      let opts = {};
      opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
      opts.secretOrKey = secret;
      passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
        USER.getUserbyUsername(jwy_payload.user2, (err, user) => {
          if (err) {
            return done(err, false);
          }
          if (user) {
            return done(null, user);
          } else {
            return done(null, false);
          }
        });
      }));
    }
    

    这是模型用户中的函数。js公司

    module.exports.getUserByUsername = function (user, callback) {
      var docClient = new AWS.DynamoDB.DocumentClient();
    
      var params = {
        TableName: "Usuarios",
        KeyConditionExpression: "#us = :uuuu",
        ExpressionAttributeNames: {
          "#us": "username"
        },
        ExpressionAttributeValues: {
          ":uuuu": user
        }
      };
    
      docClient.query(params, function (err, data) {
        if (err) {
          console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
        } else {
          data.Items.forEach(function (item) {
            console.log(item.username + ": " + item.password);
            let user = item.username;
            console.log(user);
            return user;
          });
        }
      });
    }
    

    最后一个函数打印用户名+密码,因此查询正在工作,但就是这样,在通过邮递员传递用户名和密码后,我没有得到任何响应。

    谢谢大家!

    1 回复  |  直到 8 年前
        1
  •  0
  •   ilankumaran k ilankumaran k    8 年前

    你好像没有打回电话

      docClient.query(params, function (err, data) {
        if (err) {
          console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
        } else {
          data.Items.forEach(function (item) {
            console.log(item.username + ": " + item.password);
            let user = item.username;
            console.log(user);
            return user;
          });
        }
      });

    用上述代码替换以下代码

      docClient.query(params, function (err, data) {
        if (err) {
          console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
        } else {
          data.Items.forEach(function (item) {
            console.log(item.username + ": " + item.password);
            let user = item.username;
            console.log(user);
            callback(user);
          });
        }
      });