2017-03-09 9 views
1

polymer serveでうまく動作するPolymerスターターキットに基づいたページがたくさんあります。しかし、データベース照会のためにサーバー経由でいくつかのAjaxリクエストを送信する必要があるため、express.jsで自分のサーバーコードを作成する必要がありました。私の問題は、私がルートではなく、リフレッシュしているページを入力するたびに、メッセージCannot GET /bugsまたはページ名が何であっても取得するということです。私のindex.htmlページ参照以下のようにアプリ - 経路コードを持って、通常のようにcontainer.html、:つまりexpress.jsを使用して重合体アプリケーションページを表示しますか?

<app-location route="{{route}}"></app-location> 
    <app-route 
     route="{{route}}" 
     pattern="/:page" 
     data="{{routeData}}" 
     tail="{{subroute}}"></app-route> 

... 

<app-drawer id="drawer"> 
     <app-toolbar>Menu</app-toolbar> 
     <iron-selector selected="[[page]]" attr-for-selected="name" class="drawer-list" role="navigation"> 
      <a name="view-1" href="/view-1">View One</a> 
      <a name="bugs" href="/bugs">Bugs</a> 
     </iron-selector> 
     </app-drawer> 

... 

<iron-pages 
      selected="[[page]]" 
      attr-for-selected="name" 
      fallback-selection="view-404" 
      role="main"> 
      <view-1 name="view-1"></view-1> 
      <bugs-view name="bugs"></bugs-view> 
     </iron-pages> 

が、それはほぼ正確にデフォルトポリマースターターキットと同じです。次のように私のサーバーのコードは次のとおりです。

var express = require('express'); 
var path = require('path'); 
var mysql = require('mysql'); 

var connection = mysql.createConnection({ 
    host  : 'host', 
    user  : user, 
    password : password, 
    database : 'db' 
}); 
connection.connect(); 
var app = express(); 

app.get('/sql', function(req,res) { 
    //console.log(req.query.query); 
    connection.query(req.query.query, function(error, results, fields) { 
     if (error) {console.log(error); throw error;} 
     else { 
      res.send(results); 
     } 
    }.bind(this)); 
}); 

app.use(express.static(__dirname)); 
app.use(express.static(__dirname+'/src')); 
app.listen(8080); 

console.log("Server listening on localhost:8080"); 

私はlocalhost:8080罰金をロードし、うまくページに移動することができますが、私はすべてのページが、ルート上でリフレッシュしてみたときに、それは私にCannot GET /pageエラーになります。あなたのすべての後にこのを入れて、あなたのindex.html

のパスを入れ、

app.get('*', function(req, res) { 
    res.sendfile('./public/index.html', {root: '.'}); 
}); 

代わりの./public/index.html:これは...激しくイライラする経験、サーバーの設定にこれを追加すること

答えて

2

てみてください発展してきましたこのように、あなたがリロードしたページに関係なく、あなたのサーバーはあなたの "スタートポイント"を送信します。そして、あなたのjavascriptとcssをすべて引き込みます。すべてのことが終わったら、一度起動すると、ルーターが引き継ぎ、どこにいるのかを知ることができます。

+0

server.jsは私のindex.htmlと同じディレクトリにあるので、 'res.sendFile(" index.html ")'を入れます。ページをロードしようとすると、 'TypeError:パスは絶対パスでなければなりません。または、res.sendFile'ルートを指定する必要があります。 – IronWaffleMan

+0

'index.html'を'。/ index.html'にしてください。これにより、 'res.sendFile(" ./index.html ")' – Pytth

+0

があるはずです。 '。/ index.html'でも同じエラーが発生します。代わりに 'res.sendFile(" ./ index.html "、{root:__dirname});'を実行しようとしました。これはエラーを取り除きますが、私は空白のページを取得します。何もロードされていません。 chromeの開発ツールを見ると、私の 'container.html'ページは'/src/container.html'リクエストに応答しているので、私の 'index.html'ページと同じです(' req 'パラメータ)。 – IronWaffleMan

関連する問題