Ошибка политики Rust Hyper CORS при запросе Ajax GET - PullRequest
1 голос
/ 09 марта 2020

Я работаю, чтобы получить ответ JSON от Rust Hyper Server, используя AJAX. Вот код Rust.

extern crate hyper;
extern crate futures;
#[macro_use]
extern crate serde_json;
use hyper::{Body, Response, Server, Method, StatusCode};
use hyper::service::service_fn_ok;
use futures::Future;

fn main() {

    let router = || {
        service_fn_ok(|req| {
            match(req.method(), req.uri().path()) {
                (&Method::GET, "/") => {
                    Response::new(
                        Body::from(
                            json!([{
                                "id": "01",
                                "Name": "faheem"
                                },
                                {
                                "id": "02",
                                "Name": "waseem"
                                }]).to_string()
                        )
                    )
                },
                (_, _) => {
                    let mut res = Response::new(Body::from("not found"));
                    *res.status_mut() = StatusCode::NOT_FOUND;
                    res
                }
            }
        })
    };    
    let addr  = "127.0.0.1:3000".parse().unwrap();
    let server = Server::bind(&addr).serve(router);
    hyper::rt::run(server.map_err(|e| {
        eprintln!("server error: {}", e);
    }));
}

Код Ajax. Этот код отлично работает с сервером NodeJS. Просто добавив заголовок Access-Control-Allow-Origin в промежуточное ПО. Но в среде гиперпространства ржавчины я мог найти любую документацию, которая поможет добавить Access-Control-Allow-Origin в среду сервера Hyper.

<script>
    $(document).ready(function () {
        BindTable();
        $("#btnSend").click(function () {
            $.ajax({
                crossDomain: true,
                url: "http://localhost:3000/add",
                type: "POST",                
                contentType: 'application/json',
                data: JSON.stringify({
                    'student': $('#student').val(),                
                }),
                success: function(data){
                    console.log(data);
                    $("#tbDetails").text("");
                    BindTable();
                }
            });            
        });
    });

    function BindTable()
{

    $.ajax({        
        type: 'GET',
        async: false,
        headers: {        
        'Access-Control-Allow-Origin': 'http://localhost:3000/'
        },
        crossDomain: true,                        
        url: "http://localhost:3000/",        
        contentType: "application/json",        
        dataType: "json",
        success: function (msg) {  
            console.log(msg);                                
            $.each(msg, function (index) { 
                var row = '<tr><td> ' + msg[index].id + ' </td> <td> ' + msg[index].name + ' </td></tr>';                                                            
                $("#tbDetails").append(row);
            }); 

        }
    });

}

</script>
<label for="student">Add student</label>
<input id="student" name="student" type="text" value="" />
<input id="btnSend" type="button" value="Send" />


<table id="tbDetails" border="1" cellpadding="2">
    <tr>
        <td>ID</td> <td>Name</td>
    </tr>
    <tbody>        
    </tbody>
</table>

Ошибка

enter image description here

1 Ответ

1 голос
/ 09 марта 2020

Вы должны добавить запись Access-Control-Allow-Header в настройках HTTPResponse сервера, который вы разместили. Далее в вашем коде в Ajax запросе значение заголовка комментируется после http. Закройте эту запись в двойных кавычках.

...