Solucionado (ver solução)
Solucionado
(ver solução)
11
respostas

Angular precisa esta rodando no servidor?

gostaria de saber se para as rotas do angular funcionar precisa esta rodando em um servidor como nodejs, toncat e etc ? se abrir o arquivo html com as rotas configuradas ele funciona ??

11 respostas

Precisa sim. Isso porque as views parciais são carregadas via Ajax. O servidor pode ser qualquer um.

Se você não usou o modo HTML5MODE de rotas, funcionará em qualquer servidor sem alteração. Se você habilitou o HTML5MODE, você precisará alterar seu servidor para devolver sempre index.html a qualquer resposta que seja feita que não seja para a API da aplicação. Inclusive para o erro 404. É uma exigência do HTML5MODE.

Se por acaso você esta começando e não tem muito traquejo no seu server, pode desabilitar o HTML5MODE e usar o # que não há problema nenhum. O Google usa # no gmail até hoje.

Abraço meu aluno!

entendi professor eu tinha habilitado o HTML5MODE e não alterei o servidor para devolver o index.html, vou fazer o teste e obrigado pela resposta.

Tranquilo. Primeiro, faça um teste sem o HTML5MODE, porque é o mais fácil. Depois de ver tudo funcionando, habilite novamente e tente realizar as alterações no backend que lhe falei.

Você precisa usar Angular 1 mesmo ou esta estudando apenas para se atualizar? Digo isso porque no curso de Vue.js parte1 e parte2 eu amarrei melhor essas questões. Talvez seja interessante você assistir depois só para completar seu entendimento dessa parte, pois os conceitos são os memos.

Abraço Glerison!

Flavio fiz o teste das duas formas agora quando ativo o HTML5MODE só funciona a navegação atraves dos links se eu digitar a url ele não encontra ex: url : http://localhost:3000/cliente retorna: Cannot GET /cliente

estou fazendo algo de errado?

main.js

angular.module('app', ['ngRoute', 'ngResource']) .config(function($routeProvider , $locationProvider){

$locationProvider.html5Mode(true);

$routeProvider.when('/', { templateUrl: 'partes/index.html' });

$routeProvider.when('/cliente', { templateUrl: 'partes/cliente.html' });

$routeProvider.otherwise({redirectTo: '/'});

});

console não da nenhum erro.

Você precisa retornar a página principal para URL's 404. Fez isso? Qual a lógica disso, meu aluno? É que quem deve tratar 404 ou mensagens de erro é sua aplicação Angular. O servidor não pode simplesmente devolver uma páginade 404 padrão, porque vai sumir com sua APP no lado do cliente.

fiz isso sim esta no codigo acima

$routeProvider.otherwise({redirectTo: '/'});

quando é uma url que não existe ele manda pra pagina principal mais quando tecle enter na url /cliente ele da a mensagem

Cannot GET /cliente

como se a pagina não fosse encontrada

solução!

Não é no código do Angular. Vou tentar explicar de outra forma.

Quando você digita localhost:3000/cliente não esta usando o hash, certo? Então, o browser vai executar uma requisição para seu servidor, mas lá não existe o recurso cliente. É por isso que lá no seu server, você tem que alterá-lo e se chegar qualquer requisição para ele, ele deve devolver como resposta index.html.

Não sei qual o server que você usa, tem que realizar essa configuração nele.

Segue um link com instruções para vários tipos de servidores:

https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode

Por fim, a boa prática é ter um servidor ou uma app para o angular e outra totalmente em separado para a API. No curso de Angular os dois estão juntos só para facilitar o aluno.

Se complicar muito, desiste do HTML5MODE. Se quiser muito muito, tem que saber como habilitar essas rotas especiais no seu server.

meu servidor é node e agora entendi perfeitamente Flavio no caso como estou enviando a requisição o angular não tem como tratar é isso? ai fica por conta do servidor que no caso temos que direcionar para a pagina principal, muito obrigado irei fazer o teste e posto aqui o resultado.

É por ai mesmo. Dá uma olhada nessa documentação que ela é muito bom. É de uma lib do Angular, mas como ela explica a esclarecer o problema eu achei bem interessante.

Funcionou direitinho Flavio obrigado.

Excelente Glerison! Esse comportamento é comum com todas as SPA que escolhem não usar o #.

Sucesso e bom estudo meu aluno!