【问题标题】:Accessing the functions in express on client side using the require -- Node js使用 require -- Node js 在客户端访问 express 中的函数
【发布时间】:2013-07-25 07:14:06
【问题描述】:

我可以访问文件中定义的配置变量

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 变量?

【问题讨论】:

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


    【解决方案1】:

    希望我与您在这里尝试做的事情并不太离谱。我的理解(在此和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 之类的东西可能会出现这种情况,但不是必需的,并且可能会使代码更加混乱)。

    【讨论】:

    • 非常感谢!会试试这个。
    • 嗨..我正在尝试你建议的方式..我还有另一个问题..因为我正在回调外部 API ..我的网页没有等待结果回来..所以当我加载网页时,我得到一个空的结果数组..这个问题有什么解决方案吗?
    • 使用回调客户端处理来自 API 的响应并将其附加到页面。
    • 我做到了.. 我调用外部 API 来获取状态,然后创建一个 json 对象,然后将其返回给原始函数。最后,我使用 response.send('page',someJSON); 将其发送到玉文件的输出。但我可以在网页上看到输出。我正在解析 JSON,所以这不是问题。我还可以在控制台上打印输出状态。我想问题是 - 脚本将空 JSON 返回给函数并且不等待来自外部 API 回调的响应......这是一种可能性还是我做错了什么?
    【解决方案2】:

    你不能在客户端使用 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;
    

    【讨论】:

    • 谢谢!!但在我的 test.js 文件中,我有 include('aws-sdk');我需要创建 aws 变量..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 2020-04-18
    • 2023-02-22
    • 2019-09-11
    • 1970-01-01
    相关资源
    最近更新 更多