Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用require--js节点在客户端访问express中的函数_Javascript_Node.js_Express_Global Variables_Requirejs - Fatal编程技术网

Javascript 使用require--js节点在客户端访问express中的函数

Javascript 使用require--js节点在客户端访问express中的函数,javascript,node.js,express,global-variables,requirejs,Javascript,Node.js,Express,Global Variables,Requirejs,我有权访问名为 test.js,其中-- 现在我需要在浏览器上发生OnClick事件时访问它。我有这个脚本,但是require模块不工作 clientScript.js var aws = require('../scripts/test.js').connect(); function getValue() { aws.describe({},function(){...}) } 如何访问此aws变量?您不能在客户端使用require(),这只是在服务器上运行的node.js提供的

我有权访问名为

test.js,其中--

现在我需要在浏览器上发生OnClick事件时访问它。我有这个脚本,但是require模块不工作

clientScript.js

var aws = require('../scripts/test.js').connect();

function getValue() {
    aws.describe({},function(){...})
}
如何访问此aws变量?

您不能在客户端使用require(),这只是在服务器上运行的node.js提供的服务器端函数。如果您需要在服务器和客户端之间共享的配置选项,那么您需要对test.js文件进行一些更改,以便它在这两种情况下都能工作。我相信有很多方法可以做到这一点,但我更喜欢的方法是:

将test.js中的所有配置变量放入如下对象:

this.ConfigOptions = {option1:value1, option2:value2};
客户端将包括如下文件:

<script src="test.js" type="text/javascript"></script>
var ConfigOptions = require('test.js').ConfigOptions;

希望我对你在这里所做的事情没有太大的偏离。我的理解是(在这和之间拼凑在一起),您希望浏览器中的某个东西在单击后将从外部API检索一些状态信息,然后这些信息将显示在客户端中

我建议您(基于上述假设)将所需的功能定义为由对Express server的HTTP请求触发的功能,Express server可以执行您的功能,并将您想要的任何内容从其进程发送回客户端

在服务器中定义(假设Express变量为
app

app.get('/request',someFunction);

someFunction
中,定义您要执行的操作、它与请求和响应的关系以及发送回客户端的内容。Express希望函数将请求和响应作为参数,但您不一定需要使用它们:

someFunction(req,res) {
  //do whatever I'd like with aws or anything else
  res.send(foo); //where foo is whatever JSON or text or anything else I'd like the client to have to manipulate
}
在客户端上,您将有一个绑定到onclick的函数,该函数将向该
/request
端点发出请求。此函数可以使用AJAX,也可以完全呈现另一个页面


这种组织方式还将显示和行为留给客户机,而服务器则负责检索和操作数据。这种布局还解决了客户机端关于require()语句的任何问题(这类语句虽然有可能,但并不必要,而且可能会使代码更加混乱).

谢谢!!但是在我的test.js文件中我有include('aws-sdk');我需要创建aws变量..非常感谢!我将尝试此方法。嗨..我正在尝试您建议的方法..我有另一个问题..因为我正在回调外部API..我的网页没有等待结果返回..所以当我加载weebpage时,我会得到一个空的结果数组..有什么解决方案吗olem?使用回调客户端处理来自API的响应并将其附加到页面。我这样做了。我调用外部API获取状态,然后生成json对象,然后将其返回到原始函数。最后,我使用response.send('page',someJSON)将其发送到jade文件的输出;但我可以在网页上看到输出。我正在解析JSON,所以这不是问题。我还可以在控制台上打印输出状态。我猜问题是-脚本将空JSON返回给函数,并且不等待外部API回调的响应……这是可能的,还是我做错了什么?
someFunction(req,res) {
  //do whatever I'd like with aws or anything else
  res.send(foo); //where foo is whatever JSON or text or anything else I'd like the client to have to manipulate
}