2016-09-23 71 views
0

好吧,有一个名为VENDOR_API_SERVER的远程服务器,我正在点击以获取各种数据。我有一个运行在MY_APP_SERVER上的应用程序,其中包含一个使用AJAX处理来自/来自VENDOR_API_SERVER的请求和响应的JavaScript文件。然后我有通过<script>标签嵌入上述JavaScript文件的MY_USER_FACING_APP。所有3个应用程序运行在不同的主机当JavaScript文件使其REST调用VENDOR_API_SERVER时,我希望从MY_APP_SERVER执行该文件,然后将响应数据提供给MY_USER_FACING_APP上的页面。使用下面的配置,正在从MY_USER_FACING_APP执行JavaScript文件,这正是我试图避免的。上MY_APP_SERVER是否有可能获得远程JavaScript文件在嵌入页面之前在服务器上执行?

req.js
URL(例如):对MY_USER_FACING_APP http://my_app_server.io/js/req.js

var jqxhr = $.get("http://vendor_api_server.io/api/dothis", function() { 
    console.log('request made'); 
}) 
    .done(function() { 
    console.log('success - check log'); 
    }) 
    .fail(function() { 
    console.log('fail - wassup'); 
    }) 

results.html
URL(例如):http://my_user_facing_server.io/search/results.html

<!doctype html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Results</title> 
    <script src="http://my_app_server.io/js/req.js"></script> 
</head> 

<body> 
    <h1>Results</h1> 
</body> 
</html> 

我说MY_APP_SERVER不能让MY_APP_SERVER执行javascript文件,然后才能将响应数据提供给MY_USER_FACING_APP,我想必须有一些安全,优雅的方式来使用MY_APP_SERVER作为代理/委托,但我很难包装我的头在附近。或者我正在尝试做的事情可能只是其核心内容的巨大破绽......我不知道,因为我对这种类型的开发很陌生。

有任何洞察力和/或智慧可以传授的人吗?

+0

为什么不在YOUR_APP_SERVER中创建服务器端请求而不是javascript请求? –

+0

为什么脚本驻留在my_app_server而不是它属于的my_user_facing_app?它有什么特别之处?什么是my_app_server的好处? – Bergi

+0

是的,无论脚本如何,您的服务器都可以。但不能简单地通过执行一个专门用于浏览器环境的脚本。 – Bergi

回答

0

现在,我已将JavaScript插件文件向驻留在MY_APP_SERVER上的PHP页面发出AJAX请求。该页面反过来使用cURL对REND调用VENDOR_API_SERVER,并将返回的数据发送回javascript/plugin文件,以便在CUSTOMERS_USER_FACING_APP上运行的应用程序中对DOM进行操作和显示。

plugin.js上MY_APP_SERVER
URL(例如):http://my_app_server.io/plugin.js

var jqxhr = $.get("http://my_app_server.io/curl.php", function() { 
    console.log('request made'); 
}) 
    .done(function(data) { 
    console.log('success - check log'); 
    console.log('response data: %o', data); 
    }) 
    .fail(function() { 
    console.log('fail - wassup!'); 
    }) 


上MY_APP_SERVER curl.php
URL(例如):http://my_app_server.io/curl.php

<?php 
$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL,"http://vendor_api_server.io/api/dothis"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 
      "postvar1=value1&postvar2=value2&postvar3=value3"); 


// receive server response ... 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$server_output = curl_exec ($ch); 

curl_close ($ch); 

print $server_output; 

?> 


结果。HTML上CUSTOMERS_USER_FACING_APP
的网址(例如):http://customers_user_facing_server.io/search/results.html

<!doctype html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Results</title> 
    <script src="http://my_app_server.io/js/req.js"></script> 
</head> 
<body> 
    <h1>Results</h1> 
</body> 
</html> 

所以我仍然不相信这是最好的方式,但它确实实现我保持请求的起源目标到来自MY_APP_SERVER而不是CUSTOMERS_USER_FACING_APP的API。

请随时在我在这里完成的任何事情中打洞。对我来说,它似乎很“解决问题”。我很想听听有关不那么棘手的解决方案的任何想法。

相关问题