App Engine + Polymer.dart 带有 hashbang 的单页 Web 应用路由

Posted

技术标签:

【中文标题】App Engine + Polymer.dart 带有 hashbang 的单页 Web 应用路由【英文标题】:App Engine + Polymer.dart single page web app routing with hashbang 【发布时间】:2015-08-01 12:11:34 【问题描述】:

我正在使用polymer.dart 创建一个单页网络应用程序,并希望将其部署在谷歌应用程序引擎上。我在路由堆栈

我的服务器使用 redstone 和shelf_static,客户端使用route_hierarchical。

bin/server.dart

import 'package:appengine/appengine.dart';

import 'package:redstone/server.dart' as app;
import 'package:shelf_static/shelf_static.dart';

main() 
  var staticHandler = createStaticHandler("web", 
      defaultDocument: "index.html", serveFilesOutsidePath: true);

  app.setShelfHandler(staticHandler);

  app.setupConsoleLog();
  app.setUp();

  runAppEngine(app.handleRequest);

lib/main_app/main_app.dart

import 'package:polymer/polymer.dart';

import 'package:route_hierarchical/client.dart';

@CustomTag('main-app')
class MainApp extends PolymerElement 
  final Router router = new Router();

  MainApp.created() : super.created();

  ready() 
    print("Main App: ready()");

    router.root
      ..addRoute(name: 'home', path: '/', enter: showHome, defaultRoute: true)
      ..addRoute(name: 'login', path: '/#!/login', enter: showLogin);

    router.listen();
  

  void showHome(RouteEvent event) 
    print("Main App: showHome()");
  

  void showLogin(RouteEvent event) 
    print("Main App: showLogin()");
  

lib/main_app/main_app.html

网页/index.html

页面

首页:localhost:8080/ 登录:localhost:8080/#!/login

如果我使用“pub serve”命令在本地运行应用程序,它就可以工作。 但是,如果我使用“gcloud preview app run app.yaml”命令在 appengine 上运行它,登录路由将不起作用并记录错误。 http://prntscr.com/77adww

【问题讨论】:

您是否打算为web/index.html 添加源? 我不知道它是什么库,也没有运行 pub 服务器。我只运行 ff 命令:“boot2docker up”、“$(boot2docker shellinit)”、“pub build”、“gcloud preview app run app.yaml” 是的,请稍等 @GünterZöchbauer 谢谢大佬,直接访问链接#!/login 还是使用地址栏显示表单? 是的,它可以工作,但是当我点击登录然后刷新页面时,它不起作用 【参考方案1】:

我终于让它工作了!问题是,就像@Jake MacDonald 所说的那样,我正在运行未转换的输出。方法如下

替换

var staticHandler = createStaticHandler("web", defaultDocument: "index.html", serveFilesOutsidePath: true);

var staticHandler = createStaticHandler("build/web", defaultDocument: "index.html", serveFilesOutsidePath: true);

【讨论】:

以上是关于App Engine + Polymer.dart 带有 hashbang 的单页 Web 应用路由的主要内容,如果未能解决你的问题,请参考以下文章

如何部署 Polymer dart 应用程序

在 Polymer Dart 中扩展纸张项目

在 Polymer.dart 中定义全局过滤器/变压器

Bootstrap.js 在 Polymer 组件中不起作用

dart语言中如何观察简单变量

App-Engine (Java) 文件上传