欢迎关注本人的微信公众号“前端小填填”,专注前端技术的基础和项目开发的学习。

   

  上一节简单介绍了什么是MEAN全栈项目,这一节将简要介绍三个内容:(1)一个通用的MEAN项目的技术架构,(2)为什么我们要打造单页应用,(3)本系列项目的技术架构和开发计划。希望通过这三个问题,我们能够对本项目产生一个全局视角。

实现一个常见的MEAN全栈项目的核心就是RESTful API。这个接口通常是用MongoDB, Express, Node.js实现的,而单页应用(SPA)由AngularJs打造。这种开发技术框架对于一个有着AngularJs背景的开发人员来说,非常适合用于构建具有快速的响应式的应用。


    对于初级开发者来说,他们通常会问该去哪个获取后台数据,RESTful API就是专门用于回答这个问题的。在后台程序中,存取数据和逻辑处理,并进行数据的暴露,但是并不关心前端代码将数据拿来做什么,前端只负责拿到活着提交数据,不理会后台逻辑,实现完全的前后端分离。这个数据交换的媒介就是RESTful API,最常见的表现形式就是URL。

在介绍我们为什么要选择单页应用之前,我必须说几句单页应用的坏话。首先就是难以被搜索引擎抓取到。由于大多数的爬虫只是对HTML内容进行简要地分析,并不会主动去下载并且分析页面内容,由于JS应用的数据多半都是直接由后台数据批量填充的,因此难以被抓取到。当然我们也可以进行一个搜索引擎优化(SEO)或者使用PhantomJs来运行js代码产生容易被抓取的HTML。然后一个很大的问题就是浏览器历史。一个应用必然包含很多的分页面,单页应用并不会对不同的分页面作隔离,只是在不同的情况下更新不同的HTML片段而已。这个对于习惯使用浏览器回退前进按钮的用户来说简直就是灾难,因为你动不动就退出了整个应用。事实上解决这个问题也不难,我们可以根据不同的分页面,更新不同的HTML片段,同时人为地在URL后面加上该页面的锚。最后一个影响比较大的问题就是页面加载速度。由于单页应用的所有HTML代码属于同一个页面,因此初次加载时,需要下载大量代码,这也就导致首页加载过慢,但是在接下来的用户互动中,由于所有的HTML代码已经加载完毕,所以整个应用不同分页面之间的交互反而会畅快无比。因此如何优化页面加载速度,尤其是首页加载速度,也是我们需要考虑的问题。

说了这么多不利的因素,那为什么我们还要使用单页应用呢?因为它流畅快速啊!

下面就来讲一下本项目的开发流程吧。

(1)首先我们将打造一个静态网站,通过Express+Node.js框架模板直接创建。

(2)打造数据模型和数据库,用MongoDB来实现。其实这里数据模型的创建主要是依靠mongoose在Express框架下面来完成的。


(3)创建REST API数据接口。这一块我们是用后台node.js来处理数据逻辑并进行数据的暴露处理。

(4)彻底打通静态页面与后台数据库之间的联系。得到我们项目的第一个版本。


(5)加入AngularJs到我们的项目中


(6)    一直到这里,我们的项目从前端到后台都是在Express框架下的,但是我们的最终目的是前端模块不依赖于Express,所以从这里开始我们要打造独立的AngularJs单页应用,对前面的代码进行重写,但是前面的部分我们会保留。


(7)在上一步的基础上,完成了重写代码之后,我们就可以彻底移除前端代码的Express框架了。


好啦,到这里我们的任务就完成啦!

先放一张我们最终想要的效果图吧

《从零开始做一个MEAN全栈项目》(2)的更多相关文章

  1. 《从零开始做一个MEAN全栈项目》(1)

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 在本系列的开篇,我打算讲一下全栈项目开发的优势,以及MEAN项目各个模块的概览. 为什么选择全栈开发? ...

  2. 《从零开始做一个MEAN全栈项目》(3)

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 上一篇文章给大家讲了一下本项目的开发计划,这一章将会开始着手搭建一个MEAN项目.千里之行,始于足下, ...

  3. 《从零开始做一个MEAN全栈项目》(4)

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 在上一篇中,我们讲了如何去构建第一个Express项目,总结起来就是使用两个核心工具,express和 ...

  4. 一个关于vue+mysql+express的全栈项目(一)

    最近学了mysql数据库,寻思着能不能构思一个小的全栈项目,思来想去,于是就有了下面的项目: 先上几张效果图吧       目前暂时前端只有这几个页面,后端开发方面,有登录,注册,完善用户信息,获取用 ...

  5. Vue、Nuxt服务端渲染,NodeJS全栈项目,面试小白的博客系统~~

    Holle,大家好,我是李白!! 一时兴起的开源项目,到这儿就告一段落了. 这是一个入门全栈之路的小项目,从设计.前端.后端.服务端,一路狂飙的学习,发量正在欣喜若狂~~ 接触过WordPress,H ...

  6. Vue、Node全栈项目~面向小白的博客系统~

    个人博客系统 前言 ❝ 代码质量问题轻点喷(去年才学的前端),有啥建议欢迎联系我,联系方式见最下方,感谢! 页面有啥bug也可以反馈给我,感谢! 这是一套包含前后端代码的个人博客系统,欢迎各位提出建议 ...

  7. SpringBoot 整合 Elastic Stack 最新版本(7.14.1)分布式日志解决方案,开源微服务全栈项目【有来商城】的日志落地实践

    一. 前言 日志对于一个程序的重要程度不用过多的言语修饰,本篇将以实战的方式讲述开源微服务全栈项目 有来商城 是如何整合当下主流日志解决方案 ELK +Filebeat . 话不多说,先看实现的效果图 ...

  8. 全栈项目|小书架|服务器端-NodeJS+Koa2实现首页图书列表接口

    通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 首页书籍信息 先来回顾一下首页书籍都有哪些信息: 从下面的图片可以看 ...

  9. 全栈项目|小书架|服务器开发-NodeJS 使用 JWT 实现登录认证

    通过这篇 全栈项目|小书架|服务器开发-JWT 详解 文章我们对JWT有了深入的了解,那么接下来介绍JWT如何在项目中使用. 安装 $ npm install jsonwebtoken 生成 Toke ...

随机推荐

  1. mysql coalesce函数

    COALESCE函数从值列表中返回第一个非NULL的值,当遇到NULL值时将其替换为0. coalesce(str1,str2....); e.g.   需要在表中查出所有比'WARD'提成(COMM ...

  2. jQuery中的map()方法

    jQuery中map()方法的使用格式为:$(selector).map(callback(index,domElement)). 将在每一个被选元素上执行map()方法中设置的回调函数,在回调函数中 ...

  3. cocos2dx 3.2 Touch Listen和menu回调实现截屏

    在Cocos2d-X 3.x里面,已经集成了截屏功能,单独放在utils命名空间里,实现在base/ccUtils.h文件里面.看下函数申明 /** Capture the entire screen ...

  4. js中遍历对象的属性和值

    今天想看一下js的数组遍历的内容,搜索到了一个关于对象遍历写好的函数,保留一下.以后好用. function allPrpos ( obj ) {   // 用来保存所有的属性名称和值   var p ...

  5. 042. asp.net使用缓存来提高母版页的访问性能

    Asp.Net缓存技术是一项非常重要的技术, 当一个页面被频繁的访问, 如果不使用缓存技术, 那么每访问一次就要回发一次服务器, 显然这样对服务器造成很大的负担, 所以, 可以在被频繁访问的页面中设置 ...

  6. vs2008及以上的ActiveX测试容器在哪儿

    解压缩 vssetupdir \Samples\1033\VC2010Samples.zip ,位于C++\MFC\ole\TstCon\ vs2008中的sample的话,要改TCProps项目的L ...

  7. Three.js开发指南---使用three.js里的各种光源(第三章)

    本章的主要内容 1 three.js有哪些可用的光源 2 什么时候用什么光源. 3 如何调整配置各种光源 4 如何创建镜头炫光 一 光源 光源大概有7种, 其中基础光源有4种 环境光(AmbientL ...

  8. Xcode编程环境经验笔记(持续汇总)

    1.工程路径设置(Search Paths) Header Search Paths:$(SRCROOT)/include Library Search Paths:$(SRCROOT)/lib $( ...

  9. PChar,PAnsiChar,String,AnsiString,Char数组,AnsiChar数组转换

    PChar,PAnsiChar,String,AnsiString,Char数组,AnsiChar数组之间的转换关系见下图 通过转换链,可以实现任意两个类型之间的互转.如PChar转PAnsiChar ...

  10. Add Digits, Maximum Depth of BinaryTree, Search for a Range, Single Number,Find the Difference

    最近做的题记录下. 258. Add Digits Given a non-negative integer num, repeatedly add all its digits until the ...