我们说我按照以下方式配置redstone
@app.Route("/raw/user/:id", methods: const [app.GET])
getRawUser(int id) => json_about_user_id;
当我运行服务器并转到/raw/user/10
时,我会以字符串的形式获取原始json数据。
现在我希望能够去/user/10
,并从/raw/user/10
得到这个json的好表现。
我想到的解决方案如下:
web/user/user.html
和web/user/user.dart
,将后者配置为在访问index.html
时运行user.dart
监控查询参数(user.dart?id=10
)中,发出适当的请求并在user.html
中显示所有内容,即 var uri = Uri.parse( window.location.href );
String id = uri.queryParameters['id'];
new HttpRequest().getString(new Uri.http(SERVER,'/raw/user/${id}').toString() ).then( presentation )
这个解决方案的缺点是我没有达到/user/10
- 就像网址一样。
另一种方法是另外配置redstone如下:
@app.Route("/user/:id", methods: const [app.GET])
getUser(int id) => app.redirect('/person/index.html?id=${id}');
在这种情况下,至少需要像#34; / user / 10"是允许的,但这根本不起作用。
我该如何正确地做到这一点?在我看来,redstone的git上的网络应用程序示例含糊不清且参与其中。
我不确定是否必须通过连接红石或飞镖来解释,但我找不到任何相关内容。
答案 0 :(得分:2)
我猜你试图用模板引擎在服务器中生成html文件。 Redstone主要用于构建服务,因此它没有内置模板引擎,但您可以使用pub上可用的任何引擎,例如mustache。虽然,如果您使用Polymer,AngularDart或其他实现客户端模板系统的frameowrk,您不需要在服务器中生成html文件。
此外,如果您想重用其他服务,您可以直接调用它们,例如:
@app.Route("/raw/user/:id")
getRawUser(int id) => json_about_user_id;
@app.Route("/user/:id")
getUser(int id) {
var json = getRawUser();
...
}
Redstone v0.6(仍然在alpha中)还包含一个新的foward()函数,您可以使用它来在内部调度请求,但是,响应是作为shelf.Response对象接收的,因此您必须阅读它:
@app.Route("/user/:id")
getUser(int id) async {
var resp = await chain.forward("/raw/user/$id");
var json = await resp.readAsString();
...
}
修改强>
要提供静态文件,例如在浏览器中执行的html文件和dart脚本,您可以使用shelf_static middleware。有关完整的Redstone + Polymer示例,请参阅here(在bin/server.dart file中配置了shelf_static)。