跳到主要内容

接口操作-动态路由

动态处理路径参数

接口路由访问规则参考 接口操作-创建接口

问题背景

创建一个单一的接口,该接口可以处理路径中某些部分在每次请求时都会变化的请求。

例如,一个单一的端点需要能够处理以下两种请求:

https://192.168.108.251:8080/prod-api/noco-instance/stotest/public/hello-param/zhangsan

https://192.168.108.251:8080/prod-api/noco-instance/stotest/public/hello-param/Lisi

解决方案

接口定义 节点的 URL 属性中使用命名路径参数,然后通过消息的 msg.req.params 属性访问请求中提供的特定值。

示例

以下是示例演示了如何使用命名路径参数。

该流程包含三个节点:

  • 接口定义 节点: 配置为监听 GET 请求到 /prod-api/noco-instance/stotest/public/hello-param/:name。这里的 :name 是一个命名参数。
  • 转化模板 节点: 使用 Mustache 语法生成 HTML 响应。它通过 {{req.params.name}} 访问 URL 中传入的 name 参数值。
  • 接口响应 节点: 将 转化模板 节点生成的 HTML 作为响应发送回客户端。

http-in-dynamic-route

示例JSON

[{"id":"288a7c0.fd77584","type":"template","z":"65b5dbf44a0ca401","name":"page","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<html>\n    <head></head>\n    <body>\n        <h1>Hello {{req.params.name}}!</h1>\n    </body>\n</html>","x":530,"y":740,"wires":[["0982f3a87646410f"]]},{"id":"7665c67d.899a38","type":"http in","z":"65b5dbf44a0ca401","name":"","url":"/hello-param/:name","method":"get","upload":false,"swaggerDoc":"","advancedoptions":false,"apiAuth":"public","x":290,"y":740,"wires":[["288a7c0.fd77584"]]},{"id":"0982f3a87646410f","type":"http response","z":"65b5dbf44a0ca401","name":"接口响应","statusCode":"","headers":{},"commonTemplate":false,"responseCode":0,"responseCodeType":"num","responseData":"payload","responseDataType":"msg","responseMsg":"success","responseMsgType":"str","x":700,"y":740,"wires":[]}]

运行结果

URL 属性中的命名路径参数可以用来标识路径中在不同请求之间可能变化的部分。
msg.req.params 属性是一个键/值对的对象,其中包含每个路径参数的值。
在上述示例中,节点配置的 URL 是 /prod-api/noco-instance/stotest/public/hello-param/:name,因此对 /prod-api/noco-instance/stotest/public/hello-param/Zhangsan 的请求会导致 msg.req.params 属性包含:

{
"name": "Zhangsan"
}

http-in-dynamic-route-result

http-in-dynamic-route-flow

试试将路由的:/prod-api/noco-instance/stotest/public/hello-param/Zhangsan 的 Zhangsan 替换为 Lisi 查看效果如何