我的apache服务器设置为使用index.html响应任何请求。这背后的想法是让我们正在创建的Web应用程序处理路由。 dart-editor测试环境默认不执行此操作。
相反,当我转到http://127.0.0.1.8080/something/that/does/not/exisit
时,它会返回404.我希望它能够回复index.html并让应用程序处理路由。
是否可以为飞镖测试环境设置此行为?
答案 0 :(得分:2)
建议的方法是使用充当代理的自定义服务器转发到pub serve
。
另见
代码(从链接问题复制)
Future proxyToPub(HttpRequest request, String path) {
const RESPONSE_HEADERS = const [
HttpHeaders.CONTENT_LENGTH,
HttpHeaders.CONTENT_TYPE ];
var uri = pubServeUrl.resolve(path);
return client.openUrl(request.method, uri)
.then((proxyRequest) {
proxyRequest.headers.removeAll(HttpHeaders.ACCEPT_ENCODING);
return proxyRequest.close();
})
.then((proxyResponse) {
proxyResponse.headers.forEach((name, values) {
if (RESPONSE_HEADERS.contains(name)) {
request.response.headers.set(name, values);
}
});
request.response.statusCode = proxyResponse.statusCode;
request.response.reasonPhrase = proxyResponse.reasonPhrase;
return proxyResponse.pipe(request.response);
})
.catchError((e) {
print("Unable to connect to 'pub serve' for '${request.uri}': $e");
var error = new AssetError(
"Unable to connect to 'pub serve' for '${request.uri}': $e");
return new Future.error(error);
});
}
我使用route_hierarchical
包的方式与启用或禁用usePushState
的方式相同。这样我可以使用URL片段进行开发,使用pushState进行部署
见https://stackoverflow.com/a/25256858/217408
或两个相似(简单)的例子,其中一个使用usePushState
false
而另一个true
https://github.com/bwu-dart/bwu_polymer_routing