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

n8n自定义Oracle节点报错:未找到凭据测试函数

问题分析与解决方案

你遇到的核心问题是n8n的凭据测试函数必须绑定到对应的Credentials类中,而非Node类的methods对象。你当前把测试函数放在Node类里,n8n会去对应的凭据类型类中查找测试函数,自然找不到,所以提示“凭据无对应测试函数”。

具体修正步骤

1. 创建独立的凭据类文件

新建一个凭据类文件(比如MyOracleCredentials.ts),将测试函数定义在这个类的methods.credentialTest中:

import { ICredentialTestFunctions, ICredentialsDecrypted, ICredentialType, INodeCredentialTestResult } from 'n8n-workflow';
// 引入Oracle驱动或你的连接工具
import * as oracledb from 'oracledb';

export class MyOracleCredentials implements ICredentialType {
    name = 'myConnection'; // 必须和node.ts中credentials配置的name完全一致
    displayName = 'Oracle 数据库连接';
    properties = [
        // 这里定义你的凭据属性,例如:
        {
            displayName: '主机地址',
            name: 'host',
            type: 'string',
            required: true,
        },
        {
            displayName: '端口',
            name: 'port',
            type: 'number',
            default: 1521,
            required: true,
        },
        // 其他属性:用户名、密码、SID/服务名等
    ];

    methods = {
        credentialTest: {
            testConnection: async function(this: ICredentialTestFunctions, credential: ICredentialsDecrypted): Promise<INodeCredentialTestResult> {
                try {
                    // 编写Oracle连接测试逻辑
                    const connection = await oracledb.getConnection({
                        user: credential.user,
                        password: credential.password,
                        connectString: `${credential.host}:${credential.port}/${credential.serviceName}`
                    });
                    await connection.close();
                    return {
                        status: 'success',
                        message: '连接测试成功'
                    };
                } catch (error) {
                    return {
                        status: 'error',
                        message: `连接失败:${error.message}`
                    };
                }
            }
        }
    };
}

2. 修改Node类的配置

在你的node.ts中,只需保留对凭据的引用,移除Node类methods里的credentialTest配置:

import { OracleNode } from 'n8n-workflow';
import { MyOracleCredentials } from './MyOracleCredentials';

export class CustomOracleNode extends OracleNode {
    // ... 其他节点配置
    credentials = [
        {
            name: 'myConnection', // 和凭据类的name一致
            required: true,
            testedBy: 'testConnection' // 对应凭据类中定义的测试函数名
        }
    ];

    methods = {
        listSearch: {
            searchTables
        }
        // 移除这里的credentialTest配置
    };
}

3. 确保凭据类被正确注册

在节点的入口文件(比如index.ts)中,同时注册节点和凭据类:

import { CredentialsType, NodeType } from 'n8n-core';
import { CustomOracleNode } from './node';
import { MyOracleCredentials } from './MyOracleCredentials';

export const credentialTypes: CredentialsType[] = [
    MyOracleCredentials
];

export const nodeTypes: NodeType[] = [
    CustomOracleNode
];

关键注意事项

  • 凭据类的name必须和Node类credentials配置中的name完全一致(大小写敏感)
  • 测试函数的签名必须严格符合ICredentialTestFunction接口,包括this的类型和返回值格式
  • 确保凭据类被正确注册到n8n系统中,否则无法被识别

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:50:33