我正在使用Express框架,我的其中一个路由文件中有以下内容:
var allUsersFromDynamoDb = function (req, res) {
var dynamodbDoc = new AWS.DynamoDB.DocumentClient();
var params = {
TableName: "users",
ProjectionExpression: "username,loc,age"
};
dynamodbDoc.scan(params, function (err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err));
res.statusCode = 500;
res.send("Internal Server Error");
} else {
console.log("DynamoDB Query succeeded.");
res.end(JSON.stringify(data.Items));
}
});
}
我在我的一个路由中使用了上面的函数:
router.get('/users', allUsersFromDynamoDb);
现在,当我调用dynamodbDoc上的“scan”时定义的回调函数可以作为单独的函数非常有用。 我也可以将其重复使用在其他一些路由中。
但是,如何才能在此新函数中仍然访问“res”?
我认为我应该使用“闭包”,但我似乎无法完全正确地理解它。我认为我需要保持新回调函数的签名以期望2个参数,“err”和“data”,如以下页面所示:
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#scan-property
对于如何完成这项工作有什么想法吗?
dynamodbDoc.scan
的相同作用域内,你可以将回调函数放置在自己的命名函数中。由于JS的闭包
特性,在这里,你的回调函数将能够访问与dynamodbDoc.scan
相同的res
对象。 - Soubhik MondalallUsersFromDynamoDb
的范围之外定义,那么它将无法访问res
或req
对象。我认为你可以找到一个解决方法(具体取决于特定的用途)。 - Soubhik Mondal