Domino AppDev Pack报错TypeError: database.useAgent is not a function求助
解决
database.useAgent is not a function错误的排查步骤 我来帮你搞定这个问题,这个错误大概率是版本兼容性或者配置遗漏导致的,咱们一步步来排查:
1. 先确认你的Domino Node.js SDK版本
useAgent这个方法是Domino Node.js SDK(也就是@domino/domino-db包)后来新增的Agent操作API,如果你用的是旧版本,就会出现这个错误。
- 先检查当前安装的版本:在项目根目录运行
npm list @domino/domino-db - 如果版本低于v1.9.0(Agent API首次引入的版本),赶紧升级到最新稳定版:
npm install @domino/domino-db@latest
2. 验证Domino服务器版本和配置
Agent API需要服务器端的支持,不是所有Domino版本都能行:
- 确保你的Domino服务器版本是12.0.1 FP1及以上,旧版本没有开放Agent的API端点。
- 确认Domino REST API服务已经正确启用,并且在配置文件(比如
domino-rest-api-config.json)中,已经开启了Agent相关的权限,同时目标数据库node-demo.nsf在API的允许列表里。
3. 检查数据库ACL和用户权限
就算SDK和服务器版本都对了,用户权限不够也会出问题:
- 确认你的认证用户在
node-demo.nsf的ACL中,拥有**"运行受限代理"或"运行无限制代理"**的权限。 - 还要保证用户对目标Agent
AppDevLastModified有运行权限(Agent的安全设置里要允许该用户运行)。
4. 调试数据库对象的有效性
有时候数据库连接可能有隐性错误,导致返回的database对象不完整:
- 在代码里
console.log("3");后面加一行调试代码:
如果输出显示console.log("Database methods:", Object.keys(database)); console.log("useAgent exists?", typeof database.useAgent === "function");useAgent不存在,那说明数据库对象初始化有问题,可能是文件路径写错了,或者服务器连接时的权限不足,导致没有加载Agent相关的方法。
顺便提下你代码里的小问题
原来的代码里直接把Promise对象agentRunExample传给res.json(),客户端会收到Promise的结构而不是实际的文档数据。建议改成async/await的写法,更清晰也不容易出错,调整后的代码大概是这样:
app.get("/lastUpdated", async (req, res, next) => { try { console.log("0"); // Initialize the Server, Database and Agent objects. const server = await useServer(serverConfig); console.log("2"); const database = await server.useDatabase({ filePath: 'develop/node-demo.nsf' }); console.log("3"); // 调试用:检查useAgent是否存在 console.log("useAgent exists?", typeof database.useAgent === "function"); const agent = await database.useAgent({ name: 'AppDevLastModified' }); console.log("4"); // Create the context document with data to pass to the agent. const contextUnid = await database.createDocument({ document: { param1: 'aa', param2: 'bb', }, }); console.log("5"); // Run the agent with context document await agent.run({ // selection: { search: { query: "Form = 'VA'" } }, context: { unid: contextUnid }, }); console.log("6"); // Get the updated context document const result = await database.bulkReadDocumentsByUnid({ unids: [contextUnid], itemNames: ['found_docs'], }); console.log("7"); const [doc] = result.documents; res.json(doc); } catch(error) { console.error("Error running agent:", error); res.status(500).json({ error: error.message }); } });
按上面的步骤排查,应该能解决这个问题。
内容的提问来源于stack exchange,提问作者Gurcharan Singh
相关产品推荐
相关产品推荐

