2017-03-09 100 views
1

我有一堆基于聚合物入门套件的页面,与polymer serve一起工作良好。但是,我需要通过服务器发送一些Ajax请求来进行数据库查询,所以我不得不用express.js写我自己的服务器代码。我的问题是,每当我进入非root和刷新的页面时,我都会收到消息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错误。这使得开发一种强烈的令人沮丧的经历......

回答

2

尝试添加该到你的服务器的配置:

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

相反的./public/index.html,把路径为您index.html

将这个毕竟你其他路由,所以它不会覆盖它们。这样,无论你重新加载页面,你的服务器仍然会发送你的“起点”,这当然会吸引你的所有JavaScript和CSS。毕竟,一旦角度自举,它的路由器将接管并带你到你应该的地方。

+0

我放了'res.sendFile(“index.html”)',因为server.js和我的index.html位于同一个目录。现在,当尝试加载任何页面时,我得到'TypeError:路径必须是绝对路径或指定root为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'页面与我的'index.html'页面完全相同,因为这是响应'/ src/container.html'请求获得的内容(我记录了'req '参数)。 – IronWaffleMan

相关问题