我使用的快速框架和我的路线文件,我有以下几点:的NodeJS回调 - 使用“资源”
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参数,可以“犯错”和“数据”按如下页面:
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#scan-property
如何可以做到这一点任何想法?
我想你可以把回调放到它自己的命名函数中,只要它与'dynamodbDoc.scan'被调用的地方在同一个范围内。在这里,由于JS的'closure'特性,你的回调将可以访问与'dynamodbDoc.scan'相同的'res'对象。 –
噢,是的,这是一个选项。我应该在我的问题描述中提到这一点。但是,如果我这样做,那么该回调函数将不会在'allUserFromDynamoDB'函数之外提供。假设我还有另一个函数(用于不同的路由)'getSpecificUserFromDynamoDB',我也想从中使用它。希望我明白我的意思。 – vksinghh
问题是,如果回调函数被定义在'allUsersFromDynamoDb'范围之外,那么它将无法访问'res'或req'对象。您可以找到我认为的解决方法(取决于具体的用途)。 –