Express.js和AngularJS - 使用静态页面而不是快速视图

时间:2013-03-02 10:18:10

标签: node.js express angularjs

我有一个带有快速服务器的nod​​e.js后端。我想默认所有获取请求到角度应用程序并使用角度路由来处理请求。快速服务器将处理来自角度应用程序的所有api调用。我在顶部设置了所有api调用的快速路由,并在底部设置了以下代码:

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

这适用于默认主页,但如果有一个虚假文件夹则效果不佳。 E.g。

www.example.com (works)
www.example.com/product1 (works)
www.example.com/products/1 (does not work)

我的HTML文件使用以下结构引用脚本:

<script src="scripts/app.js"></script>

当我尝试使用虚假文件夹(www.example.com/products/1)访问网址时,出现以下错误: 找不到文件'products / scripts / app.js'

尝试使用网址中的文件夹来查找文件。有办法解决这个问题吗?或者我应该使用express来路由而不是angular?

3 个答案:

答案 0 :(得分:3)

尝试将<base href="/">添加到HTML文档的头部。这为我解决了同样的问题。

答案 1 :(得分:2)

angular-express-seed非常适合让你开始使用棱角分明和表达。

app.js

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

routes.js

exports.index = function(req, res){
  res.render('index');
};

您不必使用玉。您可以使用任何您想要的模板引擎或仅使用静态html文件。请注意,res.sendfile不会缓存文件,因此不应在生产中使用。种子还有一个示例来显示客户端和服务器之间的json通信。

exports.name = function (req, res) {
  res.json({
    name: 'Bob'
  });
};

如果您使用快递进行路由,您将失去单页应用程序的感觉。

答案 2 :(得分:0)

在HTML

中为脚本(和CSS文件)提供绝对路径
<script src="/scripts/app.js"></script>