0

エンドポイント/があり、このエンドポイントは、oAuth とアプリへのログイン用に異なる get パラメーターを渡すことがあります。

これらのリクエストを委任するための以下の関数を作成しましたqueryAction。のようなプラットフォームでは、ルートなしではルーティングできないため、レベルではなくレベルでexpressルーティングできます。pathres.queryres.query

たとえば、私が持っていて/?shop=thomas/?login=thomas&code=7ユーザーにさまざまなことをさせたい場合、app.get("/")コールバック内でさまざまな返された関数が返されます。

以下は、クエリ オブジェクトを受け取り、実行するアクションに基づいて文字列を返すコードです。

function queryAction(query, secret){
  query = (query) ? query : {}
  var signature = checkSignature(query, secret)
  var timestamp = checkTimestamp(query)
  var valid = signature && timestamp
  var hasInstallParams = _.hasOnly(query, ["code","shop","timestamp","signature"])
  var hasErrorParams = _.hasOnly(query, ["error","shop","timestamp","signature"])
  var hasErrorDescParams = _.hasOnly(query, ["error","error_description","shop","timestamp","signature"])
  if(!_.size(query)) return "view" // show shop login form
  if(_.hasOnly(query, ["shop"])) return "shop" // redirect to login
  if(_.hasOnly(query, ["charge_id"])) return "charge"
  if(hasInstallParams && valid) return "installed"
  if(hasInstallParams && !valid) return "installed_invalid_timestamp_and_signature"
  if(hasInstallParams && !signature) return "installed_invalid_signature"
  if(hasInstallParams && !timestamp) return "installed_invalid_timestamp"
  if(hasErrorParams && query.error == "access_denied" && valid) return "install_canceled"
  if(hasErrorParams && query.error == "access_denied" && !signature) return "install_canceled_invalid_signature"
  if(hasErrorParams && query.error == "access_denied" && !timestamp) return "install_canceled_invalid_timestamp"
  if(hasErrorParams && query.error == "access_denied" && !valid) return "install_canceled_invalid_timestamp_and_signature"
  if(hasErrorParams && query.error == "invalid_request" && valid) return "invalid_request"
  if(hasErrorParams && query.error == "invalid_request" && !signature) return "invalid_request_invalid_signature"
  if(hasErrorParams && query.error == "invalid_request" && !timestamp) return "invalid_request_invalid_timestamp"
  if(hasErrorParams && query.error == "invalid_request" && !valid) return "invalid_request_invalid_timestamp_and_signature"
  if(hasErrorDescParams && query.error == "invalid_scope" && valid) return "invalid_scope"
  if(hasErrorDescParams && query.error == "invalid_scope" && !signature) return "invalid_scope_invalid_signature"
  if(hasErrorDescParams && query.error == "invalid_scope" && !timestamp) return "invalid_scope_invalid_timestamp"
  if(hasErrorDescParams && query.error == "invalid_scope" && !valid) return "invalid_scope_invalid_timestamp_and_signature"
  return "undefined_action"
}

このコードを使用すると、対応する関数が存在するかどうかを確認して、たとえば実行できます。

app.get("/", function(res, req, next){
  var action = queryAction()
  if(actions[action]) return actions[action](req, res)
  return next(action)
}

これらの関数の一部は、何らかのデータベース タスクまたは非同期タスクを実行し、ユーザーをリダイレクトしたり、ビューをレンダリングしたりします。Express が何を処理すべきか (または必要な場合)、React が何を処理すべきかを調整するのに苦労しています。

  • サーバー側で実行されている同じバージョンの React が必要なため、サーバー側でのみ実行され、クライアント側のバージョンの反応から秘密の oAuth キーを削除するなど、クライアントから取り除かれるコードが存在する可能性がありますか?
  • 上記のように、React はパラメーターをさまざまなビュー / アクションにルーティングできますか?
  • React がビュー エンジンでなくなる行は何ですか?
  • 反応は、サーバー側のみのコードをレンダリングし、プッシュする前にクライアントからパーツを削除できますか?
4

1 に答える 1