【问题标题】:Exporting a variable from server side JS file to client side JS file将变量从服务器端 JS 文件导出到客户端 JS 文件
【发布时间】:2020-11-05 09:53:07
【问题描述】:

我正在尝试将一个简单的对象变量从服务器端 JS 文件导出到客户端 JS 文件。在服务器端文件中,我正在做一些网络抓取,最终产生一个简单的对象变量。在客户端文件中,我希望能够访问该变量。

我发现我确实可以导出一个变量,但是,如果服务器端文件中存在任何 commonJS 语法(如果我错了,请纠正我),那么它将不起作用。客户端文件将尝试读取整个服务器端文件,包括 commonJS 语法——但它不能。

以下代码演示了我的代码和问题:

服务器端文件:

const module = require('random_module');

let myVar = {
  firstName: "John",
  lastName: "Doe"
}
    
export { myVar };

客户端文件:

import { myVar } from 'server-side.js';

console.log(myVar);

在上面的示例中,require 语句禁止导入/导出工作。如果我删除那条线,它会起作用。但是,我不能简单地删除 require 语句,因为我的代码中需要这些语句。我当然可以将我的网络爬虫输出到 JSON 文件,然后从中读取,但这似乎很冗长。

其他人已经解决了节点和浏览器之间共享代码的问题,例如这个this post,但是,我只需要导出一个简单的对象变量——而不是整个模块。

尽管我的明确导出语句针对一个简单的对象变量,为什么客户端文件仍试图读取整个服务器端文件?我该如何规避这个问题?

谢谢。

【问题讨论】:

    标签: javascript node.js commonjs


    【解决方案1】:

    尽管我的明确导出语句针对一个简单的对象变量,为什么客户端文件仍试图读取整个服务器端文件?

    必须执行模块中的代码才能得到结果。

    它无法知道不需要第 1 行,但需要第 3-8 行。

    如果你导入一个模块,你就导入了一个模块。解构操作是在模块导出的整个对象上完成的。


    如果你输出的是 data 而不是 code 那么不要使用模块。让浏览器使用 Ajax 请求 JSON。您无需更改网络抓取工具,因此它以不同的方式输出数据。您可以在您的服务器中编写一个 Web 服务端点来导入您已有的模块并使其中的数据可用。

    【讨论】:

      【解决方案2】:

      替换这个 -

      let myVar = {
        firstName: "John",
        lastName: "Doe"
      }
      

      有了这个-

      export let myVar = {
        firstName: "John",
        lastName: "Doe"
      }
      

      然后它将起作用。如果您觉得这很有用,请查看答案旁边的箭头。

      【讨论】:

      • 不,不会。浏览器在遇到require 语句时仍然会抛出异常。
      • 感谢您贡献 Akash。但是,您提供的解决方案导致了同样的错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      相关资源
      最近更新 更多