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

Chainlink Functions能否读取本地实时数据?模块导入报错咨询

报错原因

你遇到的Error: Import of module node-dht-sensor not allowed是因为Chainlink Functions的执行环境是受限的沙盒环境:

  • 仅允许使用官方白名单内的Node.js模块,node-dht-sensor不在白名单中;
  • 沙盒没有直接访问本地硬件(比如GPIO引脚)的权限,而node-dht-sensor依赖硬件访问才能读取传感器数据,因此无法在Chainlink Functions代码中直接导入使用。

可以,但不能直接在Chainlink Functions代码中操作本地硬件。需要通过间接方式:把本地传感器数据暴露为HTTP API,再让Chainlink Functions通过HTTP请求获取数据。

实现步骤及示例代码

1. 本地搭建HTTP服务,暴露传感器数据

在你的本地设备上运行一个简单的HTTP服务器,读取传感器数据并返回JSON响应。比如用Express框架实现:

const express = require('express');
const sensor = require('node-dht-sensor');

const app = express();
const PORT = 3000;
const DHT_TYPE = 11;
const DHT_PIN = 4;

// 定义接口返回传感器数据
app.get('/sensor-data', (req, res) => {
  sensor.read(DHT_TYPE, DHT_PIN, (err, temperature, humidity) => {
    if (err) {
      return res.status(500).json({ error: err.message });
    }
    res.json({ temperature, humidity });
  });
});

app.listen(PORT, () => {
  console.log(`传感器数据服务运行在端口 ${PORT}`);
});

在Chainlink Functions中使用内置的fetch API请求上述HTTP服务的接口,处理数据后编码返回:

// 请求本地传感器数据接口
const response = await fetch('http://你的服务器公网IP或内网穿透地址:3000/sensor-data');
if (!response.ok) {
  throw new Error(`请求失败!状态码: ${response.status}`);
}
const sensorData = await response.json();

// 处理数据并编码返回
const roundedTemperature = Math.round(sensorData.temperature);
return Functions.encodeUint256(roundedTemperature);

注意事项

  • 确保本地HTTP服务能被Chainlink节点访问:如果是本地测试,可使用内网穿透工具将本地端口暴露到公网;
  • Chainlink Functions沙盒内置支持fetch API,无需额外导入模块;
  • 如需使用其他Node.js模块,需确认是否在Chainlink官方白名单内,仅纯JS、不依赖硬件/本地资源的模块可能被允许。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:57:51