使用Angular和Express分离问题的最佳做法是什么?

时间:2014-05-16 20:18:37

标签: angularjs express mean-stack

我觉得快递和#39;任何MEAN堆栈教程都会掩盖这一点,所以我决定在这里问一下。

另见这些类似的SO帖子:
Why would one want to use Express instead of AngularJS?
Angular and Express routing

使用带有Angular指令/属性的纯HTML作为Express中的视图引擎,在单个布局模板中针对路径呈现页面部分的最佳做法是什么?

如何使用HTML / Angular作为视图引擎? 在Jade,您可以执行block content之类的操作。

您是否使用Angular Router ng-view并使用指令? 如果是这样,Express的重点是什么?只是服务器?为什么不直接使用Connect?

P.S。如果您对Jade或EJS感到疑惑,我只是学习Express和Angular,所以我试图将语言抽象保持在最低限度。

我想我的困惑源于Express和Angular在模板和路由方面的重叠,但Express主要关注服务器端和Angular,客户端。对于刚刚学习这些内容的人来说,当一切都如此开放时,很难知道如何实施。

我正在寻找详细的,特定的实施代码示例,这些示例在分离关注点时使用最佳做法。看到它并在上下文中解释它是我如何从别人那里学到最好的。

4 个答案:

答案 0 :(得分:1)

如果你想要类似玉的块,请查看角度块:

https://github.com/wmluke/angular-blocks

答案 1 :(得分:1)

了解Angular和YOUR_SERVER通常无关紧要很重要。这是"我的文件去哪里"。正如单页应用程序所暗示的那样,它是一条静态路由。我确信Connect会处理这个问题,但是应用程序的服务器部分可能比简单地提供静态页面更令人担忧。认证,业务逻辑,API路由和其他问题在某些时候出现,因此Express(及其生态系统)很有意义。

您的单页应用程序肯定会有自己的路线。它们与您的服务器路由无关,其中包括到Angular应用程序页面的静态路由,以及Angular应用程序将要进行的API调用的任何路由。

了解您正在编写两个不同且独立的应用程序,通过API连接,这一点非常重要。您的Node服务器提供静态HTML和JS这一事实在很大程度上是巧合。应该以孤立的,分离的方式考虑和开发Angular应用程序,以获得最佳结果。

答案 2 :(得分:1)

表达和角度服务完全不同。

在大多数类似MEAN的stacs情况下(例如只是快速角度),express表示服务器PLUS API提供程序

您将app.get(' /')与任何服务器端模板化,如jade(只是为了拥有更清晰的html文件......),然后使用应用。 get(' / partial /:name')处理所有具有相同模板语言的部分。

然后,您使用app.get(' / api / anyapi1'),app.get(' / api / anyapi2')为角度提供整个api - 无论如何它将是 - 一些mongo或postgres处理,或只是你的静态json文件。

在new express4中您还可以创建专用的api路径:

var api = express.Router();

api.get('/somget', function(req, res) {
    res.send('some json');
});

// init api route. all api routes will begin with /api 
//(like above api.get will be at /api/somget)
app.use('/api', api);

您还可以处理快速方面的会话和授权,以及在客户端无法或无法完成的大量内容。

希望它有所帮助。

编辑:很快说:快递是http服务器,其他服务和api的后端,而角度是整个前端,消耗后端提供的。

进行这样的分离您甚至可以将后端api提供给其他人,或者在其上构建不同的服务。

答案 3 :(得分:0)

正确,MEAN堆栈强调在前端创建大部分逻辑。您的快速服务器将充当骡子,根据您从前端发出的get和post请求来保存,读取,验证和删除数据。

我们的想法是将您的所有前端代码放在Express应用的公共文件夹中。

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

然后简单地创建一个将索引文件呈现为

的路径
     `app.get('/',function(req,res){
            res.render('index')
       })`

考虑到这一点,您可能想知道是否有一个可以为您生成API的解决方案,以便您只需命名您的模型,其余的通过angularjs服务完成。有http://loopback.io/只是命名您的模型,关系和限制。它会产生一个企业级api供你玩。

有关如何完成路由以及如何为应用建模的完整工作示例,请查看本教程:http://www.ibm.com/developerworks/library/wa-nodejs-polling-app/