如何将值发送到Nickel Middleware函数

tsh*_*ang 0 rust nickel

比较以下代码:

extern crate nickel;
use nickel::{Nickel, HttpRouter, Request, Response, MiddlewareResult};

fn main() {
    let data = "wanted";
    let mut server = Nickel::new();
    server.get("/", landing);
    server.listen("localhost:6767");
}

fn landing<'a>(_: &mut Request, response: Response<'a>) -> MiddlewareResult<'a> {
    response.send("not wanted")
}
Run Code Online (Sandbox Code Playgroud)

我想data在函数中使用landing.

Sim*_*ead 6

Nickel示例显示了将配置传递到服务器对象的方法.

实质上,您Nickel使用其with_data方法实例化实例:

struct MyConfig {
    greet: String,
}

let my_config = MyConfig { greet: "hello".to_string() };

let mut server = Nickel::with_data(my_config);
Run Code Online (Sandbox Code Playgroud)

您的处理程序可以通过以下server_data方法访问它:

let my_config = req.server_data();
res.send(&*my_config.greet);
Run Code Online (Sandbox Code Playgroud)

因此,将其应用于您的特定示例..您的代码变为:

extern crate nickel;
use nickel::{Nickel, HttpRouter, Request, Response, MiddlewareResult};

fn main() {
    let data = "wanted";
    let mut server = Nickel::with_data(data);
    server.get("/", landing);
    server.listen("localhost:6767");
}

fn landing<'a, 'mw>(request: &mut Request<&'a str>, response: Response<'mw, &'a str>) -> MiddlewareResult<'mw, &'a str> {
    response.send(*request.server_data())
}
Run Code Online (Sandbox Code Playgroud)

导致:

镍