У меня есть конечная точка /
, и эта конечная точка получает в разное время различные параметры для oAuth и вход в приложение.Маршрутизация получить параметры и логика приложения
Я создал функцию для делегирования этих запросов под названием queryAction
. Платформы, такие как express
, позволяют вам маршрутизировать на уровне path
, но не на уровень res.query
, потому что вы не можете иметь res.query
без маршрута.
Например, если у меня есть /?shop=thomas
и /?login=thomas&code=7
Я хочу, чтобы пользователь выполнял разные вещи, разные возвращаемые функции в обратном вызове .
Вот код, который принимает объект запроса и возвращает строку, основанную на действиях.
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)
}
Некоторые из этих функций выполняют какую-либо задачу базы данных или другую асинхронную задачу и перенаправляют пользователя или отображают представление. Мне трудно манипулировать тем, что должен делать экспресс (или, если мне это даже нужно), и то, что должен реагировать.
- Потому что я хочу ту же версию React работает на стороне сервера может существовать код, который работает только на стороне сервера и раздели из клиента, как удаление секретных ключей OAuth с клиентской стороны версии реагировать?
- Is React способен перенаправлять параметры на разные виды/действия, например, выше?
- Какая линия, где React перестает быть механизмом просмотра?
- Является ли реагирование способным отображать только код на стороне сервера и удалять части из клиента до его нажатия?
Это помогает. По-прежнему не рисует полную картину. Предположим, что '/' должен отображать форму страницы входа в систему, и '/? User = joseph' должен перенаправить пользователя. Является ли выражать handel логику для всего запроса '/', и если у него есть '? User = joseph' express, перенаправление, если'/'он выражает, реагирует? Или нужно реагировать на перенаправление? – ThomasReggi
Ну, вы могли бы выразить перенаправление, если у вас есть параметры запроса. Это, скорее всего, все равно будет проблемой реактивного маршрутизатора. У вас должен быть маршрутизатор-ответ «Маршрут» для '/', а затем в компоненте, который вы обрабатываете этот маршрут, вы можете получить параметры запроса, чтобы узнать, что 'user = joseph' –