Ich bin neuer Anfänger in Serverless Framwork. Wenn Sie Best Practices in Serverless studieren. hereBest Practices in Serverless Framework
Ich habe eine Frage über "Initialisieren externer Dienste außerhalb Ihres Lambda-Codes". Wie wird es implementiert? Zum Beispiel: Im Folgenden Code in handler.js
const getOneUser = (event, callback) => {
let response = null;
// validate parameters
if (event.accountid && process.env.SERVERLESS_SURVEYTABLE) {
let docClient = new aws.DynamoDB.DocumentClient();
let params = {
TableName: process.env.SERVERLESS_USERTABLE,
Key: {
accountid: event.accountid,
}
};
docClient.get(params, function(err, data) {
if (err) {
// console.error("Unable to get an item with the request: ", JSON.stringify(params), " along with error: ", JSON.stringify(err));
return callback(getDynamoDBError(err), null);
} else {
if (data.Item) { // got response
// compose response
response = {
accountid: data.Item.accountid,
username: data.Item.username,
email: data.Item.email,
role: data.Item.role,
};
return callback(null, response);
} else {
// console.error("Unable to get an item with the request: ", JSON.stringify(params));
return callback(new Error("404 Not Found: Unable to get an item with the request: " + JSON.stringify(params)), null);
}
}
});
}
// incomplete parameters
else {
return callback(new Error("400 Bad Request: Missing parameters: " + JSON.stringify(event)), null);
}
};
Die Frage ist, wie DynamoDB außerhalb meines Lambda-Code paraphieren.
Update 2:
Ist unten Code optimiert?
handler.js
let survey = require('./survey');
module.exports.handler = (event, context, callback) => {
return survey.getOneSurvey({
accountid: event.accountid,
surveyid: event.surveyid
}, callback);
};
survey.js
let docClient = new aws.DynamoDB.DocumentClient();
module.exports = (() => {
const getOneSurvey = (event, callback) {....
docClient.get(params, function(err, data)...
....
};
return{
getOneSurvey : getOneSurvey,
}
})();
* "Ist unterhalb Code optimiert?" * Ich würde Nein sagen, nicht nach dieser Regel. Jedes Mal, wenn "Handler" aufgerufen wird, "Umfrage".getOneSurvey() 'wird aufgerufen, und jedes Mal erstellen Sie einen neuen' aws.DynamoDB.DocumentClient'. Dies sollte nur dann einer Variablen mit dem entsprechenden Umfang zugewiesen werden, wenn der Code zum ersten Mal geladen wird, und nicht jedes Mal, wenn der Handler aufgerufen wird. –
OK! Ich habe docClient außerhalb der module.exports platziert. Es lädt zunächst und erstellt nur einen docClient. Ist mein Denken richtig? – Jim