2015-08-24 4 views
3

Я хотел бы отправить запрос на мой API и поместить некоторые двоичные данные в тело запроса, но у nickel.rs, похоже, нет способа обрабатывать потоки.Чтение тела запроса с помощью nickel.rs

Я могу получить параметры POST и проанализировать их в JSON, но как я могу прочитать тело?

ответ

3

Nickel построен на вершине hyper и Nickel Request предоставляет оригинальный гипер запрос:

pub struct Request<'a, 'b, 'k> { 
    pub origin: HyperRequest<'a, 'k>, 
    pub route_result: Option<RouteResult<'b>>, 
    // some fields omitted 
} 

Это, в свою очередь, реализует Read черту:

#[macro_use] extern crate nickel; 

use nickel::Nickel; 
use std::io::Read; 

fn main() { 
    let mut server = Nickel::new(); 

    server.utilize(router! { 
     post "**" => |req, _res| { 
      let mut body = vec![]; 
      req.origin.read_to_end(&mut body).unwrap(); 
      format!("You posted {} bytes", body.len()) 
     } 
    }); 

    server.listen("127.0.0.1:6767"); 
} 
+0

Спасибо, я буду испытайте это, как только смогу. – mgul

+0

То, что я хочу, если быть точным, записывать данные тела как су, если они входят в файл. Я не хочу загружать все тело, а затем писать, я хочу написать его байтом за байт, как только они придут. – mgul

+0

@ Jhun это нормально. 'req.origin' реализует' Read', который позволит вам передавать вещи. Я честно не знаю точно, когда вызван обработчик, как если бы Никель ожидал, что все будет буферизовано или нет. – Shepmaster

Смежные вопросы