gpt4 book ai didi

javascript - 路由获取参数和应用逻辑

转载 作者:行者123 更新时间:2023-12-02 16:01:19 24 4
gpt4 key购买 nike

我有一个端点 /,并且此端点有时会传递不同的 oAuth 获取参数并登录到应用程序。

我构建了一个用于在下面委托(delegate)这些请求的函数,名为 queryActionexpress 等平台允许您在 path 级别进行路由,但不能在 res.query 级别进行路由,因为您无法拥有 res .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)
}

其中一些函数将执行某些数据库任务或其他异步任务并重定向用户或呈现 View 。我很难兼顾express应该处理什么(或者如果我什至需要它)和React应该处理什么。

  • 因为我想要在服务器端运行相同版本的 React,是否可以有只运行服务器端并从客户端中剥离的代码,例如从客户端版本的 React 中删除 secret oAuth key ?
  • React 是否能够像上面那样将参数路由到不同的 View /操作?
  • React 在哪一行就不再是 View 引擎了?
  • React 是否能够渲染出仅服务器端的代码并在推送之前从客户端删除部分代码?

最佳答案

这可能无法回答您的个人问题,但您正在寻找的解决方案是 react-router .

我将它与 express 一起使用的方式是,我通过 express.get(/*) 或其他方式“捕获所有”路由,并将该查询通过管道向下传输到 react-router 处理程序。请查看this page了解有关其工作原理的更多信息。

这允许你将参数路由到不同的 View ,让你使用express来删除React的/etc oauth key ,并且实际上只是充当你的React组件的中间件。我不确定“在推送之前从客户端中删除部件”是什么意思,但在渲染组件之前,您现在肯定可以做任何您需要做的事情。

关于javascript - 路由获取参数和应用逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31166281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com