我有一個角帆的應用程序,我想刪除從URL中配置sails服務器以使用html5Mode?
我加入這個哈希我的客戶app.config
$locationProvider.html5Mode(true);
和路由工作,直到我刷新頁面。
導航至http://localhost:1337/about
工程。我刷新並獲取
{
"status": 404
}
from sails server。如何配置sails以使用angularjs html5Mode?
我有一個角帆的應用程序,我想刪除從URL中配置sails服務器以使用html5Mode?
我加入這個哈希我的客戶app.config
$locationProvider.html5Mode(true);
和路由工作,直到我刷新頁面。
導航至http://localhost:1337/about
工程。我刷新並獲取
{
"status": 404
}
from sails server。如何配置sails以使用angularjs html5Mode?
這是一個稍微不同的問題,但我有一個以前的答案可能適用。 Page not found when refreshed on SailsJS
你遇到了這個問題,因爲當你重新加載頁面時,sails正在響應,並且它對你的角度路由一無所知。
要使用HTML5Mode,您需要將服務器設置爲僅提供根(或「index.html」)文件。 「web.com/index.html」。在我看來,最好的做法是將您的Sails應用程序和您的Angular前端分開分開。通過這種方式,您可以輕鬆設置服務於角度客戶端前端的Web服務器,只爲非AJAX調用提供index.html。
要在sails中做到這一點,沒有「開關」,你可以設置一個應用程序的廣泛政策,檢查角度是否打電話或瀏覽器正在發出呼叫併發送適當的文件,你可以看到下面的代碼。你將不得不確保角度是設置以下頭 X-要求,隨着= XMLHttpRequest的
應用策略
module.exports = function(req, res, next) {
// Checks if this is an ajax request
// If True then skip this and return requested content
// If False then return the index (or root) page
if (if !req.isAjax) {
return res.view("/index");
}
return next();
};
您可以設置一個通配符路由到一個控制器方法,將發送了你的單頁面應用程序或實際資產(如果存在)。如果你有一個明確的URL前綴,那麼這個問題就不會那麼嚴重了,例如我的案例中的/admin
。下面是我使用的是什麼:
routes.js:
'GET /admin/*': 'AdminController.index'
AdminController.js:
var path = require('path');
var fs = require('fs');
module.exports = {
index: function(req, res) {
var requestedPath = req.url;
var resolvedPath = path.resolve(requestedPath);
if (resolvedPath.indexOf('/admin') !== 0) {
res.send(403);
} else {
var publicRoot = sails.config.paths.public;
var fullPath = path.join(publicRoot, resolvedPath);
fs.exists(fullPath, function(exists) {
if (exists) {
res.sendfile(resolvedPath, { root: publicRoot });
} else {
res.sendfile('/admin/index.html', { root: publicRoot });
}
});
}
}
};
如果資產的公共區域(如.js
文件)下確實存在,發送它下來;否則,請發送index.html
。隨着一些偏執的路徑檢查。
我在這裏有問題,當我重新加載任何頁面(除(())我得到404。 – krekto
你有你的設置的基本示例,你可以發佈的地方? – Meeker
我只是在角度上啓用app.js的html5mode,添加了上面的警察,並啓用「*」:isAjax;在政策。 – krekto