0

嗨,我正处于一个新项目的开始阶段。

我将在前端使用 yeomans 现代工作流程工具,Angular js 工作。

使用 express 用 node.js 编写的后端。我不想在服务器上创建任何 html,所有这些都将静态地提供给客户端,然后通过以 express 编写的 RESTful 服务访问,其中 angular js 应用程序的魔力将创建动态内容。该应用程序将是一页的。作为它的一页,需要有一个包罗万象的视图规则。

目前我有以下典型结构:

app.js
public < dir containing the static html, js, css etc.
 index.html
 scripts
 styles
 views

我发现大多数人呈现 html 服务器端,然后使用 angular 或任何框架来提供更多内容。人们通常在服务器上使用玉模板来提供内容,我认为没有必要这样做,因为所有内容都将是非常动态的。

Yeoman 的工作流程是如此简单和强大,我不想打扰它。由于许多原因,当您添加新路由时,yeoman 会将 js 引用添加到 index.html 的底部,由于模板是一种不同的语法,因此我不能为此使用 yeoman。

我也喜欢这种架构中关注点的分离。express 安装主要关注 RESTful 服务,无法控制演示文稿,然后 /public 文件夹服务于使用 express.static(PATH) 提供的演示文稿。

我可以愉快地使用 hashbangs 进行路由,但它对于 html5 pushstate 来说并不是那么简单。

我的问题是全部路由。我发现的问题是有效地重定向不在 /api 资源 url 下的所有流量。虽然不会中断被 index.html 替换的资产。

app.get(url('/person/lesson/:id'), api.getLesson);

app.all('*', routes.index);

我努力了:

routes.index = function(req,res){
res.sendfile('./public/dist/index.html');
};

routes.index = function(req,res){
res.redirect('/');
};
4

2 回答 2

2

通过将静态路由和其他预定义路由放在下面的通用代码之前,这将起作用。

app.get('*', function(req, res){
  res.sendFile(__dirname + '/public/index.html');
});

但是请注意,如果您使用静态路由,例如映射到 / 的 /public/ 文件夹,则需要在 HTML 中使用绝对引用来引用这些路由(即“/css/styles.css”而不是“css/styles.css ”)。如果您使用相对 URL(不带 /),则引用将基于 URI 并由于未定义该相对 URL 而落入笼统的范围内。

于 2015-12-19T05:07:13.527 回答
-3

将您的 API 路由(获取、发布、删除等)放在捕获之前。无需重定向。

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

没有别的了。

于 2013-07-06T18:10:11.677 回答