1

在 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);
    });
  });
}
4

2 回答 2

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);
    });
  });
}
于 2014-07-26T00:58:29.610 回答
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。

于 2014-08-10T19:13:35.860 回答