使用require - Node js访问客户端Express中的函数

时间:2013-07-24 21:33:53

标签: javascript node.js express global-variables requirejs

我有一个访问名为

的文件中定义的配置变量

test.js有 -

 var aws = require('aws-sdk');
 exports.connect = function(){
    return aws;
 }

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

clientScript.js

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

function getValue() {
    aws.describe({},function(){...})
}

如何访问此aws变量?

2 个答案:

答案 0 :(得分:0)

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

将所有配置变量放在test.js中,如下所示:

this.ConfigOptions = {option1:value1, option2:value2};

客户端将包含如下文件:

<script src="test.js" type="text/javascript"></script>

并可以通过ConfigOptions对象

访问配置选项

虽然服务器会使用require()来包含文件并访问配置选项,如下所示:

var ConfigOptions = require('test.js').ConfigOptions;

答案 1 :(得分:0)

希望我与你在这里尝试做的事情相差不远。我的理解(在此与your previous question之间拼凑在一起的是,您希望浏览器中的某些内容在点击后从外部API检索一些状态信息,然后将显示在客户端中。

我建议做什么(基于上述假设)将您想要的功能定义为由Express服务器的HTTP请求触发的内容,该服务器可以执行您的功能并从其进程返回您想要的任何内容给客户。

在您的服务器中定义(假设您的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()语句的任何问题(尽管可能使用Browserify之类的内容,但这些问题可能会使代码更加混乱)。