エクスプレスとパスポートを使用してWebサーバーi node.jsを作成しました。これは、oauth 2.0戦略(https://www.npmjs.com/package/passport-canvas)を使用して認証します。認証されたとき、私のようなコールを作りたい:nodes.js内の関数とjavascriptファイル間で暗黙的にコンテキストを渡す
app.get("/api/courses/:courseId", function(req, res) {
// pass req.user.accessToken implicitly like
// through an IIFE
createExcelToResponseStream(req.params.courseId, res).catch(err => {
console.log(err);
res.status(500).send("Ops!");
});
});
私の問題は、私は私のaccessTokenへのアクセス権を持っている、createExcelToResponseStreamからのすべての後続の呼び出しでは、希望ということです。後でビジネスレイヤーで大量のAPI呼び出しを行う必要があります。私がアクセストークンへのグローバルアクセスを作成しようとすると、私は 競合状態を(私は思う)リスクます
const rq = require("request");
const request = url => {
return new Promise(resolve => {
rq.get(
url,
{
auth: {
bearer: CANVASTOKEN // should be req.user.accessToken
}
},
(error, response) => {
if (error) {
throw new Error(error);
}
resolve(response);
}
);
});
};
- - 人々はで回答を得ることすなわち:私はこのようになりますメソッドを呼び出します別の人のアクセストークンのコンテキスト。私は私が何かを知っている私のコードベースの LOFとビジネス層の機能の多くをリファクタリング に持っている必要が変数としてコンテキストを渡す場合
- 彼らはおよそ
です知っている必要はありませんそこでは、JavaScript、スコープ、関数、モジュール、ファイルをコンテキスト全体(スコープによって、適用、バインド、これなど)に渡すことができます。スレッドごとに1つのユーザーコンテキストがあるマルチスレッド環境でやっているのと同じ方法です。
createExcelToResponseStreamに2番目のパラメータを追加しますか? (申し訳ありません、他の方法はありません、JS JSが語彙的スコープを持っています) –
私が望むことを目的としたフレームワークが見つかりました:continuation-local-storage [link](https://www.npmjs.com/package/continuation-local-ストレージ)。しかし、私はストレージ1からその値を取り出すことしかできないので、いくつかの設計上の問題に遭遇しました。他のリファクタリングをしない限り、値に何回もアクセスする必要がありました...私は第2のパラメータアプローチを使用することになりました。あまりにもかわいいですが、私は100%競争条件を持っていないと確信しています。 –