You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AngularJS/Angular中导入Node.js文件的函数变量并传递IOTA数据到前端

解决方案

你当前的核心问题是原始client.js为Node.js环境代码,使用的CommonJS规范require语法无法直接在浏览器中运行,以下提供两种可直接落地的实现方案:


方案一:Node.js作为后端提供接口(推荐)

将IOTA数据查询逻辑封装为后端接口,前端通过HTTP请求获取数据,可彻底规避前端依赖适配问题。

步骤1:改造Node.js后端

先安装所需依赖:

npm install express cors

修改后的client.js代码:

const Iota = require('@iota/core');
const Extract = require('@iota/extract-json');
const express = require('express');
const cors = require('cors');
const app = express();
const port = 3000;

// 允许前端跨域调用
app.use(cors());

const iota = Iota.composeAPI({
  provider: 'https://nodes.devnet.iota.org:443'
});

// 定义消息查询接口
app.get('/api/messages', async (req, res) => {
  try {
    const bundle = await iota.getBundlesFromAddresses(['PXMPEGYZCOVEOSRAUXY9VYRBHJBSDWORWQNBDJRVEFTMXZWLTQZSPHEUDMXT9YKGPMMSVDSNHSJNWQUOX']);
    const x = [];
    for (let i = 0; i < bundle.length; i++) {
      x[i] = JSON.parse(Extract.extractJson(bundle[i])).message;
    }
    res.json(x);
  } catch (err) {
    console.error(err);
    res.status(500).json({error: '数据查询失败'});
  }
});

app.listen(port, () => {
  console.log(`后端服务运行端口:${port}`);
});

步骤2:编写AngularJS控制器逻辑

myApp.js代码如下:

var app = angular.module('myApp', []);
app.controller('client', function($scope, $http) {
  // 调用后端接口获取数据
  $http.get('http://localhost:3000/api/messages')
  .then(function(response) {
    $scope.x = response.data;
  })
  .catch(function(err) {
    console.error(err);
  });
});

步骤3:调整HTML代码

删除HTML中引入client.js的语句,该代码为后端运行代码无需前端加载:

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<body>

<div ng-app="myApp" ng-controller="client">
    {{ x[0]}}
    {{ x[1]}}
    {{ x[2]}}
</div>

<script src="myApp.js"></script>
</body>
</html> 

运行方式

  • 先启动后端服务:node client.js
  • 直接打开HTML文件即可看到渲染数据

方案二:浏览器端直接运行IOTA查询逻辑

如果不想搭建后端服务,可直接使用IOTA官方适配浏览器环境的版本,无需Node.js运行环境。

步骤1:调整HTML引入依赖

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<!-- 引入浏览器适配版IOTA库 -->
<script src="https://unpkg.com/@iota/core@1.0.0-beta.30/dist/iota-core.min.js"></script>
<script src="https://unpkg.com/@iota/extract-json@1.0.0-beta.30/dist/extract-json.min.js"></script>
<body>

<div ng-app="myApp" ng-controller="client">
    {{ x[0]}}
    {{ x[1]}}
    {{ x[2]}}
</div>

<script src="myApp.js"></script>
</body>
</html> 

步骤2:修改控制器逻辑

将查询逻辑直接写入myApp.js:

var app = angular.module('myApp', []);
app.controller('client', function($scope) {
  // 从全局对象获取IOTA工具
  const Iota = window.IotaCore;
  const Extract = window.IotaExtractJson;
  const iota = Iota.composeAPI({
    provider: 'https://nodes.devnet.iota.org:443'
  });
  $scope.x = [];

  iota.getBundlesFromAddresses(['PXMPEGYZCOVEOSRAUXY9VYRBHJBSDWORWQNBDJRVEFTMXZWLTQZSPHEUDMXT9YKGPMMSVDSNHSJNWQUOX'])
  .then(bundle => {
    for (let i = 0; i < bundle.length; i++) {
      $scope.x[i] = JSON.parse(Extract.extractJson(bundle[i])).message;
    }
    // 通知AngularJS数据更新,触发视图重渲染
    $scope.$apply();
  })
  .catch(err => {
    console.error(err);
  });
});

注意事项

该方案仅适用于公开数据查询场景,禁止在前端代码中写入任何私钥、种子等敏感信息,避免数据泄露。


内容的提问来源于stack exchange,提问作者SERKAN AKBULUT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:27:07