2015-04-15 2 views
7

может кто-нибудь объяснить мне, как объединить nodejs (сервер hapi) с AngularJs? Я думал, что могу просто уловить каждый запрос, сделанный на мой сервер Hapi, и отреагировать на эти запросы с использованием маршрутов angularjs/REST и т. Д.Nodejs/HapiJs с Angular.js

Сервер работает и обслуживает мой индекс index.html, как я ожидал, но, тем не менее, я должен глупый, чтобы зацепить мой app.js за угловой материал. Я предполагаю, что мой подход совершенно неправильный.

Hapi

server.route({ 
    method: 'GET', 
    path: '/{p*}', 
    handler: function (request, reply) { 
     reply.file('public/index.html'); 
    } 
}); 

index.html (заголовок)

<script src="CDN/angular.min.js"></script> 
<script src="./app.js"></script> 

Инлайн AngularJs код в моем index.html работает должным образом. Я благодарен за каждый ответ или некоторые ресурсы, на которые я могу смотреть.

ответ

8

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

// static file 
server.route({ 
    method: 'GET', 
    path: '/{param*}', 
    handler: { 
     directory: { 
      path: Path.join(__dirname, 'public/app') 
     } 
    } 
}); 

видеть больше информации здесь http://hapijs.com/tutorials/serving-files

2

Ваше предположение является правильным. Если вы готовы работать с Hapi и AngularJS, рекомендуется использовать ваше приложение Hapi в качестве веб-сервиса RESTful с помощью JSON для передачи данных, а ваше приложение AngularJS будет вашим веб-интерфейсом.

Таким образом, вы можете использовать лучшее из обеих сторон. AngularJS будет использовать свои услуги ($http, $resource) для получения данных из вашего веб-сервиса и представления его через правильные виды для маршрутов вашего приложения.

Все это в основном MEAN stack, но вы будете использовать Hapi вместо Express.

2

Хотя предложение Lugg, безусловно, работает, оно применимо только в том случае, если у вас нет веб-сервера. Вы должны организовать свое клиентское приложение отдельно от своего серверного приложения или по крайней мере разместить свое серверное приложение в папке выше вашего корня doc.

Клиентское приложение будет настроено как статический веб-сайт. Ваш веб-сервер будет обрабатывать обслуживание index.html и всех реплицированных угловых файлов. Ваш HTML и Angular/Javascript будут обрабатывать запросы на частичные, js-модули и т. Д. Таким образом, вы получаете выгоду от всех функций и модулей вашего веб-сервера.

Затем серверная сторона может быть предназначена для прослушивания запросов API и ответа на них. Он не должен доставлять ваши файлы приложений клиента. Обычно он должен доставлять ответы JSON.

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

Я считаю, что мой ответ - просто расширение ответа Hodes. Я попытался сделать свой ответ более явным, но я думаю, что общая идея такая же.

0

Я использую этот код для индексного файла:

server.route({ 
method: 'GET', 
path: '/{param*}', 
handler: function(request, reply) { 
    return reply.file(path.resolve(__dirname, '..', 'public/index.html')); 
} 
}); 

И это для других каталогов:

server.route({ 
method: 'GET', 
path: '/{param*}', 
handler: { 
    directory: { 
    path: path.resolve(path.resolve(__dirname, '..', 'directory_name')) 
    } 
} 
}); 

Для некоторых версий узла, необходимы инертный требуют

var Inert = require('inert');