如何在呈现页面之前在服务器端执行api请求
How to do a api request on the server side before rendering the page?
我在页面上有一个JS脚本,在页面加载时调用Y服务器,并显示一些数据。如果您查看页面源代码,您可以看到脚本正在调用Y服务器。
我需要做的是是从我的服务器向Y服务器发出api请求,并在没有JS脚本的情况下将页面呈现给客户端。因此,如果你查看页面源代码,你不会看到任何对Y服务器的引用,因为在页面呈现给客户端之前,这一切都发生在我的后台服务器上。
有人知道这个设置是如何完成的吗?寻求指导…文档链接?如果不清楚,请要求澄清。
在高层次上,您需要:
- 为API实现HTTP客户端
- 添加调用API的代码(可能在控制器中,但它可以是一个助手,模型或服务对象)
- (可选)解析响应(这取决于它的格式和你需要的格式)
- 在视图 中呈现解析后的响应
2,4很容易。这取决于你,除非你能提供具体的例子。不过,这应该很容易。剩下1.
如果您正在使用流行的API,那么很有可能已经编写了客户端。如果它是内部的东西,您可以使用Net::HTTP或其他流行的HTTP客户端库之一编写自定义的东西。只要你不需要从浏览器发送任何cookie/header,这应该是非常容易的。
下面是使用RestClient和返回HTML的API的快速示例。class SampleController < ApplicationController
def index
@mydata = RestClient.get('http://path.to/your/api?with=params')
end
end
# /app/views/index.html.erb
<h1>Here's Your Data</h1>
<%= raw @mydata %>
您需要的是直接从服务器生成HTML,并呈现动态页面。您必须从模板中通用html,并将其直接呈现给客户端。例如,php,您将拥有带有php变量的.twig文件,而不是静态html。java的servlet也是如此。页面在后台呈现,并作为静态文件发送到客户端。不确定ROR的确切方法。
我在尝试一个简单的例子。假设变量data包含您想要从api获取的元素,下面是您的示例:
//第一个case
staticPage1.html
[…]
var data = loadAjax (url)
window.console.log(数据);//从后端提供的页面与前端相同
//生成第二个case
。someServerSideTemplate
[…]
var data={{getDataFromUrl(url)}}//一些服务器端模板语言
generated.html
[…]
Var data={"message":"hello world"}//实际页面呈现
- 加载服务器端渲染的React组件后执行脚本
- 在服务器端脚本执行后关闭选项卡
- 如何在VB中先执行客户端代码,然后再执行服务器端代码
- 当eval只执行服务器端数据时,在javascript中使用eval是否安全
- 正在使用在服务器端或客户端执行的 Jquery 函数
- dust.js是随机用户上传的模板,可以安全地在服务器端执行
- 突出显示与perl正则表达式匹配的HTML部分 - 在服务器端perl或客户端javascript中执行此操作
- 从javaScript执行服务器端代码
- C#/ASP-web,ASP:在客户端执行复选框消息框,如果是,则运行服务器端代码
- 在服务器端执行Javascript
- 从javascript或JQuery执行服务器端cgi代码时遇到问题
- 停止 C# 在下拉列表 javascript 验证失败时继续执行服务器端脚本
- 如何在服务器端执行 JS
- 如何在 asp.net 中更新服务器端执行的 UI 按钮文本
- 加载 DOM 并使用 .Net 在服务器端执行 javascript
- 使用 JQuery 执行服务器端验证,然后将用户发送到另一个站点
- 是否可以(并推荐)使用 Javascript 来执行服务器端脚本
- 单击按钮时执行客户端和服务器端功能 - 特定方案
- 如何在呈现页面之前在服务器端执行api请求
- 节点服务器端执行骨干删除命令,但前端未触发同步事件