2015-12-13 3 views
3

Я могу настроить Angular в своем веб-приложении с помощью ASP/Visual Studio довольно легко, но я хочу попасть в мир Node, в частности Express. Я действительно не понимаю базового обработчика маршрутов для Express, который будет поддерживать парадигмы, которые имеет Угловая.Настройка с помощью Angular

Например, при создании экспресс-файла есть миллион примеров, но почти все они используют Jade для шаблонов, и я против синтаксиса Jade и не хочу его использовать.

До сих пор, у меня есть это для моего экспресса-сервера (я прокомментировал некоторые вопросы, касающиеся моих решений, сделанные до сих пор):

var express  = require('express'), 
    path  = require('path'); 

var app = express(); 

var env = process.env.NODE_ENV || 'development'; 

// 1) Is this really necessary if I'm going to utilize Angular routing for views? 
app.set('views', path.join(__dirname, '/app/views')); 
app.use(express.static(__dirname + '/public')); 

// 2) I'm assuming this is the desired pattern for utilizing Angular. 
// A catch-all handler that serves up an html file, which will then 
// hand off the rest of the routing to Angular? 
app.get('*', function(req, res) { 
    res.sendFile(path.join(__dirname + '/public/index.html')); 
}); 

const PORT = 3000; 
app.listen(PORT); 
console.log('Listening on port: ' + PORT); 

вопросы, которые я являюсь:

  • Is app.set('views', ...) необходимо в Угловом приложении через Express или это действительно предназначено для рабочего процесса шаблонов Jade/EJS? Если это полезно для Angular, какой путь я должен указать? Мои угловые взгляды? Или просто статический html-файл, который будет служить контейнером для всех угловых взглядов?

  • Я предполагаю, что app.use(express.static(...)) по-прежнему необходим для обеспечения того, чтобы Express мог обслуживать общедоступные статические ресурсы, такие как css/javascript.

  • Является ли обработчик маршрута app.get('*', ...) { res.sendFile('path/to/index.html') } принятым для обслуживания одного html-файла, который будет содержать все необходимые угловые использования?

  • Для Углового, нормально ли иметь только один html-файл для всего вашего приложения, а затем просто использовать маршрутизацию и контроллеры Angular для управления остальными?

+0

Просто прочитайте http://meanjs.org/docs/0.3.x/#express –

ответ

5

app.set('views', ...) ли необходимо в угловом приложение через экспресс или он действительно предназначен для шаблонного процесса Джейд/EJS? Если это полезно для Angular, какой путь я должен указать? Мои угловые взгляды? Или просто статический html-файл, который будет служить контейнером для всех угловых взглядов?

Если вам нужно отобразить представление на стороне сервера, а затем отправить его клиенту, вам это нужно. В противном случае (в вашем случае) нет. Вы можете просто отправить файл пользователю или создать пользовательский вывод на основе параметров, которые пользователь отправил на сервер. Это может быть что угодно, HTML-файл, json или просто простой текст.

Я предполагаю, что app.use(express.static(...)) по-прежнему необходим для обеспечения того, чтобы Express мог обслуживать публичные статические ресурсы, такие как css/javascript.

Вы правы. Если вам нужно также обслуживать статический контент, наилучшим способом является использование express.static, однако вы можете поймать запросы и обслуживать контент самостоятельно.

Является ли обработчик маршрута app.get('*', ...) { res.sendFile('path/to/index.html') } принятым для обслуживания одного html-файла, который будет содержать все необходимые угловые использования?

Если для всех запросов, которые не были обнаружены предыдущие маршруты, вам необходимо отправить точный файл, да, это нормально.

Помните, если вам нужно обслуживать другие HTML-файлы в качестве шаблонов, и они не находятся в том же каталоге, в котором вы указали в express.static, у клиента не было доступа к файлам html. Я обсужу это немного.

Однако, я считаю, что это хорошая практика, чтобы определить все маршруты, а не просто поставить *, чтобы поймать их всех. Лучше определить шаблон, по крайней мере, было бы легче поддерживать код позже.

Для Углового, нормально ли иметь только один html-файл для всего приложения, а затем просто использовать маршрутизацию и контроллеры Angular для управления остальными?

В зависимости от вашей заявки. В большинстве случаев да.

Я сделал несколько крупных угловых проектов, у меня есть только один маршрут, который фактически служит основному файлу html, и тот, который обслуживает статические файлы (изображения, js, css). У меня также есть маршрут, который указывает на каталог templates, который должен обслуживаться как статическое содержимое. Это шаблоны, с которыми нужно работать с AngularJS.

Для связи между вашим угловым приложением и сервером вам также понадобятся другие маршруты. Вы можете создать конечные точки API RESTful для создания уровня связи для клиента и сервера.

Я обычно имею эти две строки в код сервера, чтобы сохранить все шаблоны в одной папке. Это делает его легче управлять и определить потоки работы:

app.use(express.static(path.join(__dirname, 'public'))); 
app.use('/templates', express.static(path.join(__dirname, 'templates'))); 

Для связи между сервером и клиентом:

app.post('/login', function (req, res) { 
// deal with login information ... 
    res.send({ 
     done: true, 
     errors: [] 
    }); 
}); 

app.post('/search', function (req, res) { 
    // do the search ... 
    res.send({ 
     done: true, 
     results: [] 
    }); 
}); 

Remember, если вы используете * в какой-то момент в вашем приложении, другие маршруты, вы определили после этого, никогда не поймаете запрос.

И

Я против синтаксиса Джейд и не имеют никакого желания, чтобы использовать его.

Да, меня тоже! Но есть и другие варианты, я лично предпочитаю ejs. Если вы используете express-generator, вы можете просто перейти -e переключатель, и он создаст все, что совместимо с ejs.

$ express -e 

Также взгляните на here.

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