2016-10-06 6 views
1

私はAngular2(Typescript)Webアプリケーションのサービスとして使用する必要のあるゴランのコードをたくさん持っています。だから私はNodejsの代わりにバックエンドとしてgolangを使用しようとしています。私は基本的にすべてのチュートリアルに従ってきましたが、誰も私を助けてくれないようです。Angular 2 frontend、Golangバックエンド

ここだが(私はネット/ HTTPを使用してみました、今私はゴリラ/マルチプレクサを使用しています)golangのための私のマルチプレクサです:

func AngularAnnotations(w http.ResponseWriter, r *http.Request) { 
    file := r.URL.Path[len("/@angular/") : len(r.URL.Path)-1] 
    http.FileServer(http.Dir("frontend/mode_modules/@angular/" + file + "/src/" + file + ".js")) 
} 

func main() { 
    r := mux.NewRouter() 

    r.PathPrefix("node_modules/").Handler(http.StripPrefix("node_modules/", http.FileServer(http.Dir("frontend/node_modules")))) 
    r.PathPrefix("/css/").Handler(http.StripPrefix("/css/", http.FileServer(http.Dir("frontend/css")))) 
    r.PathPrefix("css/").Handler(http.StripPrefix("css/", http.FileServer(http.Dir("frontend/css")))) 
    r.PathPrefix("/node_modules/").Handler(http.StripPrefix("/node_modules/", http.FileServer(http.Dir("frontend/node_modules")))) 
    r.PathPrefix("/app/").Handler(http.StripPrefix("/app/", http.FileServer(http.Dir("frontend/app")))) 
    r.PathPrefix("/typings/").Handler(http.StripPrefix("/typings/", http.FileServer(http.Dir("frontend/typings")))) 
    r.PathPrefix("app/").Handler(http.StripPrefix("app/", http.FileServer(http.Dir("frontend/app")))) 
    r.PathPrefix("typings/").Handler(http.StripPrefix("typings/", http.FileServer(http.Dir("frontend/typings")))) 
    r.PathPrefix("/@angular/").HandlerFunc(AngularAnnotations) 
    r.PathPrefix("systemjs.config.js").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 
     http.ServeFile(w, r, "./frontend/systemjs.config.js") 
    }) 
    r.PathPrefix("/systemjs.config.js").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 
     http.ServeFile(w, r, "./frontend/systemjs.config.js") 
    }) 
    r.HandleFunc("/{_:.*}", func(w http.ResponseWriter, r *http.Request) { 
     http.ServeFile(w, r, "frontend/index.html") 
    }) 
    http.ListenAndServe(":8000", r) 
} 

そして、ここでは私のindex.htmlです:

<html> 
    <head> 
    <script>document.write('<base href="' + document.location + '" />'); </script> 
    <base href="/"> 
    <title>Angular QuickStart</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 

    <script src="css/styles.css" type="text/css"></script> 
    <!-- 1. Load libraries --> 
    <!-- Polyfill(s) for older browsers --> 
    <script src="node_modules/core-js/client/shim.min.js"></script> 
    <script src="node_modules/zone.js/dist/zone.js"></script> 
    <script src="node_modules/reflect-metadata/Reflect.js"></script> 
    <script src="node_modules/systemjs/dist/system.src.js"></script> 
    <!-- 2. Configure SystemJS --> 
    <script src="systemjs.config.js"></script> 
    <script src="node_modules/es6-shim/es6-shim.min.js"></script> 
    <script src="node_modules/systemjs/dist/system.src.js"></script> 
    <script src="node_modules/typescript/lib/typescript.js"></script> 
    <script src="node_modules/rxjs/bundles/Rx.js"></script> 

    <script> 
     System.config({ 
     map: { 
     rxjs: 'node_modules/rxjs' // added this map section, 

    }, 
     transpiler: 'typescript', 
     typescriptOptions: { emitDecoratorMetadata: true }, 
     packages: {'app': {defaultExtension: 'ts'},'rxjs': {defaultExtension: 'js'}} 
     }); 
     System.import('app/components/main') 
      .then(null, console.error.bind(console)); 
    </script> 
    </head> 
    <!-- 3. Display the application --> 
    <body> 
    <my-app>Loading...</my-app> 
    </body> 
</html> 

は現在、私のアプリの構造は次のとおりです。

frontend 
    +css 
     +styles.css 
    +node_modules 
    +typings 
    +app 
     +components 
      +models 
       -common.ts (.js, .js.map) 
       -foo.ts (.js, .js.map) 
       -bar.ts (.js, .js.map) 
      +foo-details 
       -foo-details.component.css 
       -foo-details.component.html 
       -foo-details.component.ts (.js, .js.map) 
      +foo-sections 
       -foo-sections.component.css 
       -foo-sections.component.html 
       -foo-sections.component.ts (.js, .js.map) 
      +foo-section-details 
       -foo-section-details.component.css 
       -foo-section-details.component.html 
       -foo-section-details.component.ts (.js, .js.map) 
      +bar-details 
       -etc 
      +bar-sections 
       -etc 
      +bar-section-details 
       -etc 
      -app.component.css 
      -app.component.ts (.js, .js.map) 
      -app.module.ts (.js, .js.map) 
      -main.ts (.js, .js.map) 
     +services 
      -golang.service.ts (.js, .js.map) 
      -in-memory-data.service.ts (.js, .js.map) 
      -foo-search.service.ts (.js, .js.map) 
      -foo-sections.service.ts (.js, .js.map) 
      -foo.service.ts (.js, .js.map) 
      -bar-sections.service.ts (.js, .js.map) 
      -bar.service.ts (.js, .js.map) 
     -app.routing.ts (.js, .js.map) 
     -rxjs-extensions.ts (.js, .js.map) 
    -index.html 
    -package.json 
    -systemjs.config.js 
    -tsconfig.json 
    -typings.json 
+controllers (golang) 
+models (golang) 
+routers (golang) 
-main.go 

私はクロームでこれを実行すると、私は私のアプリのtranspiledバージョンにエラーが発生します。コンポーネント.ts。

TypeError: core_1.Component is not a function 

私はバンドラーとしてwebpackを使用しようとしましたが、問題もあります。

私は長すぎて血まみれのために頭を叩いてしまいました。

ありがとうございます!

+0

インデックスページを読み込むときに、すべてのjs、cssソース(ブラウザのdevコンソールから確認できます)が含まれていますか? – abhink

+0

はい。します。彼らはすべてそこにいる。 –

答えて

3

多くの呪いの後で解決策が見つかりました。 私はthis very barebones starter for a webpackを使用しました。それはAngularClassのより普及したものよりずっとよく働いた。ちょっと古いですが、それを理解できるはずです。あなたが必要と

一つはビルドですので、あなたがあなたのpackage.jsonでこれを持っていることを確認:

"build": "rimraf dist && webpack --config config/webpack.dev.js --progress --profile --bail" 

それを実行するために行くのコードを取得するには、私が見て、this code.

を適応しました

他のタイプの処理を追加する必要がありました。

行くのコードは次のように判明:

r := mux.NewRouter() 

n := negroni.Classic() 
n.Use(gzip.Gzip(gzip.DefaultCompression)) 
n.UseHandler(r) 

abspath, err := filepath.Abs("./frontend/dist") 

if err != nil { 
    fmt.Print(err) 
} 

fs := http.Dir(abspath) 
r.PathPrefix("/mockdata").HandlerFunc(controllers.MockController) 
r.PathPrefix("/app").Handler(http.FileServer(http.Dir("./frontend/src"))) 
r.PathPrefix("/models").Handler(http.FileServer(http.Dir("./frontend/src"))) 
r.PathPrefix("/services").Handler(http.FileServer(http.Dir("./frontend/src"))) 
r.PathPrefix("/node_modules").Handler(http.FileServer(http.Dir("./frontend"))) 

r.PathPrefix("/").Handler(http.FileServer(fs)) 

http.ListenAndServe(":3333", n) 

私の問題は、私が見つけた情報源の多くは、あなたが行くのホストアプリを持ってしなければならないすべてはでそれを指していると述べたという事実から来ましたindex.html。あなたはそれを行うためにウェブパックを持っていなければならないと言わされたそれらの情報源。将来のGoogle社員たちは、私の間違いから学びます。

関連する問題