2015-02-01 11 views
0

Я пытаюсь настроить маршрутизацию с помощью ngRoute в Angular. I know, что запросы GET на бэкэнд должны быть возвращены index.html, а затем index.html грузы Угловые, которые строят соответствующую страницу.Угловые бэкэнд-маршруты для не-HTML-ресурсов

Но проблема, с которой я столкнулся, заключается в том, что запросы GET на app.js возвращаются index.html. Когда я смотрю на код других народов и старый код шахты, они в основном имеют один и тот же маршрут, как и я:

app.get('/*', function(req, res) { 
    res.sendFile(__dirname + '/index.html'); 
}); 

Например, this article, кажется, решение моей ситуации, но я не вижу, как он обрабатывает проблема, с которой я сталкиваюсь с ресурсами, отличными от HTML.

Как вы должны обрабатывать запросы GET для ресурсов, отличных от HTML?

EDIT:

Моя структура файла:

- algorithmsAssignments 
    - node_modules 
    - percolation 
    - grid.js 
    - main.css 
    - main.html 
    - main.js 
    - uf.js 
    - randomizedQueuesAndDequeues 
    - main.css 
    - main.html 
    - main.js 
    - app.js 
    - home.html 
    - index.html 
    - server.js 

server.js

var express = require('express'); 
var app = express(); 
app.get('/*', function(req, res) { 
    res.sendFile(__dirname + '/index.html'); 
}); 
app.listen(3000); 
console.log('listening on port 3000...'); 
app.use(express.static(__dirname)); 
+1

положить app.use (экспресс., Статический .... до app.get ('/ *' .... – lujcon

+0

Эй, это сработало! Спасибо. Должен ли я удалить этот вопрос? –

ответ

0

Хотя я не знаю, какой тип не-HTML ресурса вы имели в виду вас, может иметь экспресс-маршрут возвращения JSON следующим образом:

res.send({ foo: 'bar' }); 

или код состояния в дополнении к возвращению JSON

res.status(400).send({ Message: "not found" }); 

Не уверен, если это соответствует тому, что вы работаете, но вы, конечно, можете загрузить не-HTML ресурс в Угловом никогда не нуждаясь трогать Экспресс или для настройки любой маршрутизации:

$http.get('/myresources/configSettings.json').success(function (data) { 
    if (data.foo === 'bar') { 
     console.log('this works'); 
    } 
}).error(function() { 
    console.log('Error: failed to find your config settings.'); 
}); 
+0

В принципе, 'index.html 'имеет кучу js и css-файлов, которые мне нужны. –

+0

Возможно, вы можете передумать. В статье, которую вы только что связали, они определяют свои маршруты, чтобы рассылать такие страницы, как« Редактировать »,« Показать »и обратно на «Индекс», а не на обработку этих скриптов или таблиц стилей, перечисленных на их индексной странице. Вам не нужно беспокоиться о том, что Angular или Express помогают вам в этом. Эти файлы должны просто быть доступны на Пути, перечисленные (относительные или абсолютные). –

+0

Почему их 'app.get ('*')' улавливает GET-запросы для ресурсов, отличных от HTML, но мой? EDIT: см. комментарий к вопросу, это из-за промежуточного программного обеспечения. –

0

Не обслуживайте статические файлы таким образом. Вместо того, чтобы поместить все статические файлы в одном каталоге (исключая «общественность».) И добавить middleware:

server.use(express.static(__dirname + '/public')); 

Я рекомендую использовать пользовательские маршрутизации для обслуживания только динамических файлов.

+0

Я использую это промежуточное программное обеспечение, см. Редактирование на мой вопрос. Однако у меня нет вещей в общей папке. Зачем мне это нужно? Примечание: все работало до того, как я сделал бэкэнд-маршрут все. То есть. когда маршрут был только «/», все работало, за исключением прямого обращения к URL-адресам. –

+0

Вы должны поместить все статические файлы в отдельный каталог и не должны смешивать файлы на стороне сервера с клиентскими файлами, так как клиенты express.static middleware смогут загрузить исходный код на стороне сервера. В настоящее время вы можете загрузить server.js из своего браузера - я не думаю, что вы этого хотите. – lujcon

Смежные вопросы