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!
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
Sie rufen den Callback, der an 'getUserByUsername' übergeben wird, nirgendwo auf. –
versucht, die Rückkehr außerhalb der forEach, nichts geändert :( – Nico