Ich habe ein Programm, das das folgende tut.Zugriffswerte nach Authentifizierung in Knoten js
- Suchen Sie in einer DynamoDB-Tabelle.
- Holen Sie sich die Daten aus der Tabelle.
- Speichern Sie die Variablen in der Sitzung
- Nach dem Prozess, drucken Sie die Werte in der Konsole.
Mein Code ist wie folgt.
intentHandlers['GetMYBusinessInfo'] = function (request, session, response, slots) {
console.log('entered ext bloxk');
if (!session.attributes.userName) {
console.log('eneterd the user entered the block');
var userName = 'jim';
isUserRegistered(userName.toLowerCase(), function (res, err) {
if (err) {
response.fail(err);
console.log(err);
}
else if (!res) {
response.shouldEndSession = true;
}
else {
console.log(res);
var countRes = JSON.stringify(res.Count);
var unpUserRegion = JSON.stringify(res.Items[0].Region);
var unpUserCity = JSON.stringify(res.Items[0].State);
var userRegion = JSON.parse(unpUserRegion);
var userCity = JSON.parse(unpUserCity);
session.attributes.city = userCity;
session.attributes.region = userRegion;
console.log("parsed " + countRes + "\t region is " + userRegion);
session.attributes.userName = true;
}
});
}
console.log(`session values after authentication are user city is ${session.attributes.city}`);
}
Die Methode, um zu überprüfen, ob der Wert in DynamoDb ist oder nicht.
function isUserRegistered(userName, callback) {
var params = {
TableName: "usersTable",
FilterExpression: "#nme = :nme",
ExpressionAttributeNames: {
"#nme": "Name",
},
ExpressionAttributeValues: {
":nme": userName
}
};
var count = 0;
docClient.scan(params, function (err, data) {
if (err) {
console.error("Unable to scan the table. Error JSON:", JSON.stringify(err, null, 2));
callback(false, err);
} else {
console.log("Scan succeeded." + data.Items.length);
if (data.Items.length === 0) {
callback(false);
}
else {
data.Items.forEach(function (itemData) {
console.log("Item :", ++count, JSON.stringify(itemData));
});
callback(data);
}
}
});
}
wenn ich dies ausführen, wird die Ausgabe, die ich erhalte, ist:
session values after authentication are user city is undefined
Scan succeeded.1
Item : 1
{
"ID": "3",
"State": "wisconsin",
"Region": "midwest",
"Name": "jim"
}
{ Items: [ { ID: '3', State: 'wisconsin', Region: 'midwest', Name: 'jim' } ],
Count: 1,
ScannedCount: 1 }
parsed 1 region is midwest
Hier weiß ich, dass Knoten js sein Non-blockierbare Prozess, der oben Ausgabe korrekt ist, aber ich möchte das erhalten Wert der Stadt gedruckt in session values after authentication are user city is {HereTheCityComes}
anstelle von session values after authentication are user city is undefined
.
Ich bin sicher, dass die Platzierung console.log(
Sitzungswerte nach der Authentifizierung sind Benutzer Stadt ist $ {session.attributes.city} );
im letzten else-Block (Ort, an dem die Daten zurückgegeben werden).
Aber ich brauche diese Art von Funktionalität (Daten erhalten, wie in meinem aktuellen Szenario gezeigt), da es einige andere Dinge zu tun gibt nach der Überprüfung, ob der Benutzer in der Datenbank verfügbar ist.
Bitte lassen Sie mich wissen, wo ich falsch liege und wie kann ich das beheben.