2017-11-02 2 views
1

Ich bin dabei (YouTube Link) Knoten-Tutorial, weil ich eine Web-App für einen Freund erstellen muss. Er muss Dynamo DB und Knoten js verwenden und ich lerne, während ich diese App baue, mir ging es gut, aber jetzt stecke ich fest.Übergabe von Variablen zwischen Funktionen in NodeJS

Ich versuche, ein JWT-Token zu bekommen (wie auf dem Video erwähnt), aber nichts passiert. Hier ist meine Route:

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 
      } 
     }); 
     } 
    }); 
    }); 
}); 

Hier ist der Pass js Code

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); 
     } 
    }); 
    })); 
} 

Und hier ist die Funktion im Modell user.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; 
     }); 
    } 
    }); 
} 

Diese letzte Funktion gibt den Benutzernamen + Passwort, also funktioniert die Abfrage, aber das ist es, ich habe überhaupt keine Antwort bekommen, nachdem ich den Benutzernamen und das Passwort über Postman weitergegeben habe.

Danke Jungs!

+1

Was Sie fordern 'return user' in' data.Items.forEach() 'zu tun? Dieses 'return' kommt nur vom' .forEach() 'Callback zurück, nicht von der äußeren Funktion selbst. – jfriend00

+1

Sie rufen den Callback, der an 'getUserByUsername' übergeben wird, nirgendwo auf. –

+0

versucht, die Rückkehr außerhalb der forEach, nichts geändert :( – Nico

Antwort

0

Es scheint, dass Sie nicht Rückruf erwarten

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; 
 
     }); 
 
    } 
 
    });

Ersetzen Sie den folgenden ein mit obigen Code

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); 
 
     }); 
 
    } 
 
    });

Verwandte Themen