在Palantir Foundry中使用ngraph.path的aStar算法遇兼容性问题
问题解决:Palantir Foundry中使用ngraph.path的aStar时出现"(0 , a.default) is not a function"错误
错误原因分析
这个错误核心是ES模块与CommonJS模块导入不兼容导致的:ngraph.path本质是CommonJS模块,在Foundry的TypeScript运行环境中,直接用import * as ngraph from 'ngraph.path'会导致导出结构解析异常,无法正确获取aStar函数。
同时你的代码还有两个潜在问题:
Objects.search().nodes().all()和Objects.search().edges().all()是异步方法,未加await会导致获取到的是Promise而非实际数据- 未处理Foundry本体节点ID与图中节点ID的类型匹配问题
解决方案
1. 修正ngraph.path的导入方式
将原导入语句替换为以下两种方式之一:
方式一:默认导入+解构
import ngraphPath from 'ngraph.path'; const { aStar } = ngraphPath;
调用时直接使用:
const pathFinder = aStar(graph);
方式二:CommonJS风格导入
const ngraphPath = require('ngraph.path');
调用时:
const pathFinder = ngraphPath.aStar(graph);
2. 修复异步数据获取
给节点、边的查询添加await,确保拿到实际数据:
const nodes_data: Nodes[] = await Objects.search().nodes().all(); const edges_data: Edges[] = await Objects.search().edges().all();
3. 节点ID类型兼容处理
如果Foundry本体中nodeId是数字类型,需将传入的字符串ID转换为数字,避免路径查找失败:
const optimal_path = pathFinder.find(Number(start_node_id), Number(end_node_id));
修正后的完整代码
import { Function } from "@foundry/functions-api"; import { Objects, Nodes, Edges} from "@foundry/ontology-api"; import createGraph from 'ngraph.graph'; import ngraphPath from 'ngraph.path'; const { aStar } = ngraphPath; export class MyFunctions { @Function() public async Optimum_Path(start_node_id: string, end_node_id: string): Promise<string> { const graph = createGraph(); const nodes_data: Nodes[] = await Objects.search().nodes().all(); const edges_data: Edges[] = await Objects.search().edges().all(); nodes_data.forEach((node: Nodes) => { graph.addNode(Number(node.nodeId), { lat: node.latitude, lon: node.longitude }); }); edges_data.forEach((edge: Edges) => { if (typeof edge.endNodeId !== 'undefined') { graph.addLink(Number(edge.startNodeId), Number(edge.endNodeId), { length: edge.distance }); } }); const pathFinder = aStar(graph); const optimal_path = pathFinder.find(Number(start_node_id), Number(end_node_id)); return `Optimal path from ${start_node_id} to ${end_node_id}: ${JSON.stringify(optimal_path)}`; } }
额外注意事项
- 确认Foundry Functions项目已正确安装
ngraph.graph和ngraph.path依赖(在package.json中添加后同步依赖) - 若仍存在兼容性问题,可尝试使用Foundry内置的地理空间/路径规划能力替代第三方库,减少环境适配成本
内容的提问来源于stack exchange,提问作者Rowan Barua
相关产品推荐
相关产品推荐

