私はExpressのフレームワークを使用していると私は私のルートファイルのいずれかで、次のしている:私は私のルートの1つで上記の関数を使用していますNodeJSコールバック - へのアクセス「RES」
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で "スキャン"を呼び出す際に定義しているコールバックは、別の関数として定義するとかなり便利です。私は他のルートのいくつかにもそれを再利用することができます。
しかし、私はこの新しい機能の中でどうして "res"にアクセスできますか?
私は "閉鎖"を使用するべきだと思うが、私はそれを正確に得ることはできない。
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#scan-property
これを行う方法上の任意のアイデアを:私は、次のページのとおり、私は2つのparamsを期待する新しいコールバック関数のシグネチャを維持する必要があると思い、「ERR」と「データ」?
あなたが望むすべてのルートのミドルウェアとしてその機能を使用することができます
'dynamodbDoc.scan'が呼び出されているスコープと同じスコープ内にある限り、コールバックを独自の名前付き関数に置くことができると思います。ここでは、JSの 'closure'機能のため、あなたのコールバックは' dynamodbDoc.scan'と同じ 'res'オブジェクトにアクセスします。 –
ああ、それはオプションです。私は実際に私の質問の記述でそれを言及すべきだった。しかし、それを行うと、そのコールバック関数は 'allUserFromDynamoDB'関数の外部で利用できなくなります。私は別の機能(別のルートのために) 'getSpecificUserFromDynamoDB'を使用したいところから持っていたとしましょう。私が言っていることがはっきりしていることを願っています。 – vksinghh
問題は、コールバック関数が 'allUsersFromDynamoDb'のスコープ外で定義されている場合、' res'またはreq'オブジェクトにアクセスすることができないということです。特定の用途に応じて、私が考える回避策を見つけることができます。 –