2016-01-13 196 views
4

因此,我几乎读过所有关于此主题的答案/问题,但我仍然有很多疑问。使用AngularJS和外部NodeJS服务器启用html5模式

首先,问题:

我有支持HTML5的应用程序AngularJS,这样我就可以摆脱“#”标志。

$locationProvider.html5Mode({ enabled: true, requireBase: true }); 
$locationProvider.hashPrefix('!'); 

这是我的index.html的重要组成部分:

<!DOCTYPE html> 
<html ng-app="application" ng-controller="ApplicationController as app"> 
    <head> 
    <meta name="fragment" content="!"> 

    <title>LivingRoomArt</title> 

    <meta charset="UTF-8"> 
    <base href="/index.html" /> 

我有服务器的NodeJS通信这是使用快报:

router.route('/events') 
    .post(authController.isAuthenticated, eventController.postEvent) 
    .get(eventController.getEvents); 

// Register all our routes with /api 
app.use('/api', router); 

// Start the server 
app.listen(process.env.PORT || 5000); 

所以,通常的问题:

重新加载后,我从服务器获取404。我得到的这个概念在这里,处处建议的解决方案:

// This route deals enables HTML5Mode by forwarding missing files to the index.html 
    app.all('/*', function(req, res) { 
    res.sendfile('index.html'); 
    }); 
}); 

的事情是,我没有我的服务器上的index.html文件,既不做 我想在复制它我的服务器。

那么,我该如何告诉Node正确处理请求,而无需在我的服务器上存储html文件?

我在Heroku上托管Node应用程序,如果有帮助。

+0

所以,你有一个客户端服务器和API服务器,对不对? 404错误是客户端服务器上的句柄? – Zagonine

+0

那么,现在无处:)但我可以在客户端处理它,是的。我有一个API服务器和我的客户端的静态服务器(HTML,JS等) –

+0

然后呢?我需要访问子视图并在那里进行AJAX调用。 –

回答

1

当你说你不提供静态文件,你是说node.js API是不正确的?

我想你最终会得到两个不同的网址,我们称它们为http://api.comhttp://client.com

我不明白为什么你的API应该处理404。你在你的浏览器中加载http://api.com并期待你的index.html?如果这是真的你的使用情况,我会建议一个简单的路由你的API中声明,如:

app.all('/*', function (req, res) { 
    res.redirect('http://client.com'); 
}); 

这将重定向不是你以前的路线声明逮住你的客户网站的所有请求。


然后,有两种选择:

如果是服务于您的静态文件服务器是另一个节点。Js服务器使用快速,你可以完全做sendfile,因为你现在有权访问index.html

如果你正在使用Nginx,(我强烈建议,如果你不这样做)静态,你可以做一个这样的配置,以重定向所有失败的请求(文件丢失/路由)到index.html

server { 
    listen 80; 

    root /app/www; 
    index index.html; 

    location/{ 
    try_files $uri $uri/ /index.html; 
    } 
} 
+0

明天我会试试。现在就读这个,但我可以回答一个问题:https://api.com没有返回index.html,它只是返回空白。这是一个纯粹的REST API。也许这会改变一点答案?对于nginx。不,我不知道。你能推荐一个服务来做到这一点吗? –

+0

嗯,是啊,你的api没有返回索引是完全正常的,我只是问你是否想对它做一些特别的事情。所以你现在正在使用节点来为你的静态文件提供服务?是的,我会推荐一些* amazon网络服务*,您可以在其中设置一个nginx或者一个专用的服务器,但aws是非常低成本的。 –