Я настроил свой ui-router следующим образом:
app.config(function($stateProvider, $urlRouterProvider, $locationProvider) {
$stateProvider
.state('home', {
url: "/home",
templateUrl : 'home/home.html',
controllerUrl: 'home/controller.js'
})
.state('blog', {
url: "/blog",
templateUrl : 'blogger/blog.html',
controllerUrl: 'bloger/controller.js'
})
$locationProvider.html5Mode({
enabled: true,
requireBase: true
});
});
Код сервера:
var express = require('express');
var serveStatic = require('serve-static');
var server_port = 9000;
var server_ip_address = '127.0.0.1'
var app = express();
app.use(express.static('app'));
app.use(serveStatic('app', {'index': ['index.html', 'index.htm']}));
dirName = 'app';
options = {
root: dirName,
dotfiles: 'deny',
headers: {
'x-timestamp': Date.now(),
'x-sent': true
}
};
app.get('*', function(req, res) {
return res.sendFile('index.html', options);
});
app.listen(server_port, server_ip_address, function () {
console.log( "Listening on " + server_ip_address + ", server_port " + server_port)
});
Но всякий раз, когда я нажимаю Ctrl/Command + R (или обновляется), он говорит, что не может найти путь? Как я могу обойти эту проблему?
Структура папки: Views:./app/home/, app/blog/Basefile:./app/index.html Угловая UI-маршрутизация из:./app/base.js
Проблема будет в настройках сервера. Угловое - это приложение Front Controller. Вам нужно, чтобы каждый запрос перенаправлялся на index.html/index.php на вашем сервере. Например, настройки htaccess в apache. Дополнительную информацию можно найти здесь: перенаправление htaccess для угловых маршрутов
Вы можете использовать приведенный ниже код в приложении app.js и затем работать:
ОБНОВЛЕНО:
/** Below code set the html as your default engine*/
var fs = require('fs');
app.engine('html',function(path,opt,fn){ //manishp
fs.readFile(path,'utf-8',function(err,str){
if(err) return str;
return fn(null,str);
});
});
app.get('*',function(req,res){
res.render('<your_layout_file_or_basefile>');
});
Это в основном потому, что ваши маршруты AngularJS не являются актуальными страницами html. Например, если у вас есть маршрут в вашем угловом приложении для входа/входа. Этот URL-адрес прекрасно работает, если вы ссылаетесь на него из своего приложения, но если пользователь попытается перейти непосредственно на эту страницу, сервер вернет 404.
Это связано с тем, что режим AngularJS HTML5 использует API истории для ввода нового URL-адреса в ваш браузер. Да, для этого требуется дополнительная работа на стороне сервера, чтобы этот URL вернул правильный контент.
Проблема с вашей стороны сервера, вы должны обрабатывать все маршруты в файле server.js
. Например, здесь приведен фрагмент
router = settings.express.Router()
dirName = settings.path.resolve(__dirname, '..', '..');
options = {
root: dirName + '/website/views',
dotfiles: 'deny',
headers: {
'x-timestamp': Date.now(),
'x-sent': true
}
};
router.get('*', function(req, res) {
return res.sendFile('index.html', options);
});