【问题标题】:Problems running node.js in browser在浏览器中运行 node.js 的问题
【发布时间】:2016-06-27 09:16:05
【问题描述】:

我正在尝试在我的浏览器中运行带有 node.js 功能的应用程序。我签入了终端,我的包含 node.js 函数的 javascript 文件运行良好。但是,当我运行连接到 javascript 文件的 html 文件时,浏览器会返回一个错误,指出未定义 require 函数。我明白这是因为浏览器不能单独运行node.js

我正在尝试运行的 node.js 代码是访问 Watson 视觉识别 api:

var watson = require('./node_modules/watson-developer-cloud');

watson.visual_recognition({
    username : '49f5d504-9387-45c6-9fda-9b58a9afc209',
    password : 'IITqAn0VPaFr',
    version : 'v2-beta',
    version_date : '2015-12-02'
}).listClassifiers({}, function(err, response) {
    if (err){
        console.log(err);
    } else {
        console.log(JSON.stringify(response, null, 2));
    }
});

我知道我拥有所有必需的文件,因为该文件在终端中运行。因此,我继续包括:

<script src ="https://cdn.socket.io/socket.io-1.4.5.js"></script>

在连接我的 javascript 文件之前在我的 index.html 中。

但是,我的 javascript 文件仍然返回与未定义 require 函数相同的错误。难道我做错了什么?有什么方法可以在具有 node.js 但特别是不使用 browserify 的浏览器中运行这个 javascript 文件(这在过去给我造成了一些目录问题)?

【问题讨论】:

  • 请在您的问题中包含相关的标记和javascript。
  • 为 Node 编写的代码不会只在没有添加代码的浏览器中运行;它们是两个截然不同的环境。
  • (特别是,require() 没有内置在浏览器中。)
  • nodejs 用于在服务器上运行代码,而不是在浏览器中。

标签: javascript html node.js


【解决方案1】:

虽然 Node 和浏览器都运行 JavaScript (ECMAScript),但这并不意味着环境是相同的。

特别是,浏览器中有许多 API 和全局变量在 Node 中不可用(文档、窗口等),而 Node 中的其他全局变量和 API 在浏览器中不可用(需要等)

为了执行使用 Node 特定全局变量(如 require())的代码,需要为您定义和填充这些变量。这正是 webpack 或 browserify 或 systemjs 为您所做的。即使这样,您也需要确保您引入的模块将在浏览器中运行。

【讨论】:

    【解决方案2】:

    浏览器(还)没有像 nodejs 这样的内置模块系统。如果您想使用模块,例如在节点中,请考虑使用 browserifyrequirejs 库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      相关资源
      最近更新 更多