在dart中重写请求URI

时间:2014-07-03 18:50:58

标签: dart dart-io

在node.js中,可以通过执行以下操作来调整请求的URL:

app.use(function(req, res, next) {
  if (req.url.slice(-1) === '/') {
    req.url = req.url.slice(0, -1);
  }
  next();
});

以下dart失败,因为所有请求属性,Uri及其路径只有getter。有什么建议可以实现吗?也许通过创建一个新的HttpRequest并将其响应发送到原始请求?

void main() {
  var virDir = new VirtualDirectory("../somewhere_else");

  HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 8080).then((server) {
    print("Serving at ${server.address}:${server.port}");
    server.listen((HttpRequest request) {
      request.uri.path = "/newPath";
      virDir.serverRequest(request);
    });
  });
}

2 个答案:

答案 0 :(得分:2)

您是否尝试过使用serveFile而不是serveRequest?这可能是一个临时的解决方法,直到您想要的行为得到实施,或由Dart团队开发人员解决。

我还没有测试过这段代码,但它理论上应该可行:

void main() {
  var virDir = new VirtualDirectory("../somewhere_else");

  HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 8080).then((server) {
    print("Serving at ${server.address}:${server.port}");
    server.listen((HttpRequest request) {
      var newUriPath = "../somwhere_else/${request.uri.path.replace("/client/","")}";
      virDir.serveFile(new File(newUriPath), request);
    });
  });
}

答案 1 :(得分:2)

从http_server(VirtualDirectory)的0.9.3版本开始,我在构造函数中添加了一个可选的pathPrefix命名参数。

请参阅http://www.dartdocs.org/documentation/http_server/0.9.3/index.html#http_server/http_server.VirtualDirectory#id_VirtualDirectory-

这应该可以完全按照你要做的去做,而无需重写请求的Uri。