Wordpress 自定义路由端点,404 和 500 错误

问题描述 投票:0回答:1

我正在开发一个使用自定义 REST API 路由的 WordPress 插件。我有一个使用 GET 的函数和一个使用 POST 的函数,两个回调都已注册。当我导航到 localhost/mysitename/wp-json/wpgpt/v1 时,我可以看到列出的端点。当我导航到 testbubby 或在邮递员中发出 GET 请求时,我收到:{ “代码”:“rest_invalid_handler”, "message": "路由的处理程序无效。", “数据”: { “状态”:500 } 当我导航到发送消息时,我收到 404 (但我认为这只是因为它只需要一个发布请求),但是当我在邮递员中发出 POST 请求时,我仍然收到 500 错误。

这是我的php代码,在构造过程中调用了register_wpgpt_api_routes()。

function register_wpgpt_api_routes() {
    register_rest_route(
        'wpgpt/v1', 
        '/send-message', 
        array(
        'methods'  => 'POST',
        'callback' => 'send_message',
        'permission_callaback' => '__return_true'
    ));
    register_rest_route('wpgpt/v1', '/testbubby', array(
        'methods'  => 'GET',
        'callback' => 'test_route',
        'permission_callaback' => '__return_true'
    )
);
    
}

function test_route(){
    echo "hey there";
}


function send_message( string $message ): string {    
    $messages = [];

    if( isset( $this->system_message ) ) {
        $messages[] = [
            "role" => "system",
            "content" => $this->system_message,
        ];
    }
    //$messages = array_merge( $messages, $this->message_history );

    $messages[] = [
        "role" => "user",
        "content" => $message,
    ];

    return $this->make_api_request( $messages );
}

这是应该发出请求的 JS 函数,但当我单击按钮执行它时,我得到 404(但我可以在网络选项卡中看到有效负载):

 function wpgpt_send_message() {
    let message = $(".wpgpt-chat-input").val();
    wpgpt_add_message( message, "user" );
    $(".wpgpt-chat-input").val("");

    let payload = {
        "message": message,
        "message_history": wpgpt_message_history
    };

    $.ajax({
        url: '/wp-json/wpgpt/v1/send-message',
        method: 'POST',
        contentType: 'application/json',
        dataType: 'json',
        data: JSON.stringify( payload ),
        success: function( response ) {
            wpgpt_add_message( response.message, "assistant" );
            wpgpt_message_history.push( {
                "role": "user",
                "content": message,
            } );
            wpgpt_message_history.push( {
                "role": "assistant",
                "content": response.message.replace( "\n", "<br>" ),
            } );
        },
        error: function() {
            wpgpt_add_message( "Sorry, there was an error", "assistant" );
        }
      });
} 

感谢任何帮助,这是我第一次尝试使用自定义端点。

wordpress wordpress-rest-api
1个回答
0
投票

请阅读 WordPress 文档中的整个页面:添加自定义端点

您将看到传递到

callback
的第一个参数是一个 WP_REST_Request 对象。
send_message()
函数需要一个字符串作为第一个参数。

您还将了解到,

callback
应该返回一个值(例如PHP关联数组),该值可以序列化为JSON字符串(由WordPress自动完成)以返回给客户端。
test_route()
函数echo内容而不是return-ing 一个值。

另一个值得阅读的有用页面是路由和端点

© www.soinside.com 2019 - 2024. All rights reserved.