- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过创建 REST API 并将帖子提交到数据库来对评论示例做一个简单的扩展。我正在处理程序本身的范围之外创建连接,我假设这是我的问题所在。我只是不确定如何修复它。
这是后处理程序的代码:
server.get("/comments", middleware! {
let mut stmt = conn.prepare("SELECT * FROM comment").unwrap();
let mut iter = stmt.query_map(&[], |row| {
Comment { id: row.get(0), author: row.get(1), text: row.get(2) }
}).unwrap();
let mut out: Vec<Comment> = Vec::new();
for comment in iter {
out.push(comment.unwrap());
}
json::encode(&out).unwrap()
});
这是我得到的错误:
<nickel macros>:22:50: 22:66 error: the trait `core::marker::Sync` is not implemented for the type `core::cell::UnsafeCell<rusqlite::InnerConnection>` [E0277]
我假设错误是因为我创建了实例,然后尝试在闭包中使用它,并且一旦我的主函数完成,该变量可能就被销毁了。
最佳答案
这是一个 MCVE重现问题(您应该在提问时提供这些):
extern crate rusqlite;
#[macro_use]
extern crate nickel;
use nickel::{Nickel, HttpRouter};
use rusqlite::Connection;
fn main() {
let mut server = Nickel::new();
let conn = Connection::open_in_memory().unwrap();
server.get("/comments", middleware! {
let _stmt = conn.prepare("SELECT * FROM comment").unwrap();
""
});
server.listen("127.0.0.1:6767");
}
Types that are not
Sync
are those that have "interior mutability" in a non-thread-safe way, such asCell
andRefCell
这与您收到的错误消息相匹配。 Connection
中的某些内容具有内部可变性,这意味着编译器无法自动保证跨线程共享它是安全的。我有一个 recent question 可能对 Connection
的实现者有用,如果他们可以保证共享是安全的(也许 SQLite 本身做出保证)。
您可以做的最简单的事情是确保一次只有一个线程可以访问数据库对象:
use std::sync::Mutex;
fn main() {
let mut server = Nickel::new();
let conn = Mutex::new(Connection::open_in_memory().unwrap());
server.get("/comments", middleware! {
let conn = conn.lock().unwrap();
let _stmt = conn.prepare("SELECT * FROM comment").unwrap();
""
});
server.listen("127.0.0.1:6767");
}
关于rust - 如何创建使用数据库连接的 Nickel 处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36694984/
我正在尝试制作一个与 JavaScript 交互并将 JSON 数据发送到 Rust 函数的网页,然后呈现 www 文件。我的项目结构是: /.. /src /www |___i
考虑以下代码: extern crate nickel; use nickel::{Nickel, HttpRouter, Request, Response, MiddlewareResult};
我正在尝试通过创建 REST API 并将帖子提交到数据库来对评论示例做一个简单的扩展。我正在处理程序本身的范围之外创建连接,我假设这是我的问题所在。我只是不确定如何修复它。 这是后处理程序的代码:
Nickel声明您可以在 URL 中使用变量,这听起来很有用,但是可以使用多个变量吗? 类似于: www.example.com/login/:userid?:apikey?:etc server.g
我正在使用 nickel.rs、PostgreSQL 和 Angular.js。我可以使用 HTTP POST 插入到我的表中: // insert { let conn = shared_c
我正在学习 Rust,并在 http://reddit.com/r/rust 上看到了一篇帖子昨天Nickel .作为一名 Node.js 开发人员,我有兴趣在空闲时间检查一下。 我从 http://
我正在使用 Rust 和 Nickel.rs 构建一个网络应用程序。我有一个提交带有 POST 请求的表单的路由。 我希望能够使用请求数据(从表单返回的数据),但我不确定如何去做。 // This w
我想向我的 API 发送一个请求并将一些二进制数据放入请求的正文中,但是 nickel.rs 似乎没有办法处理流。 我可以获取 POST 参数并将它们解析为 JSON,但如何读取正文? 最佳答案 镍建
我正在尝试使用 Nickel 模板返回 JSON 文件。我找到了一些返回 JSON 响应的 API 示例代码并对其进行了修改: extern crate rustc_serialize; #[macr
我使用 nickel.rs: router.get("/api/movies", middleware! { |request, response| let mut test_movies =
我创建了以下登录表单和随附的模板: main.rs #[macro_use] extern crate nickel; extern crate mustache; extern crate ru
我正在尝试创建一个小型的类似 REST 的 API,它应该使用 HTTPS 进行保护。我想为服务器使用 nickel crate,为客户端使用 hyper_ruSTLs 和 hyper。 只要我使用浏
我是一名优秀的程序员,十分优秀!