《从零开始做一个MEAN全栈项目》(2)
欢迎关注本人的微信公众号“前端小填填”,专注前端技术的基础和项目开发的学习。
上一节简单介绍了什么是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)的更多相关文章
- 《从零开始做一个MEAN全栈项目》(1)
欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 在本系列的开篇,我打算讲一下全栈项目开发的优势,以及MEAN项目各个模块的概览. 为什么选择全栈开发? ...
- 《从零开始做一个MEAN全栈项目》(3)
欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 上一篇文章给大家讲了一下本项目的开发计划,这一章将会开始着手搭建一个MEAN项目.千里之行,始于足下, ...
- 《从零开始做一个MEAN全栈项目》(4)
欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 在上一篇中,我们讲了如何去构建第一个Express项目,总结起来就是使用两个核心工具,express和 ...
- 一个关于vue+mysql+express的全栈项目(一)
最近学了mysql数据库,寻思着能不能构思一个小的全栈项目,思来想去,于是就有了下面的项目: 先上几张效果图吧 目前暂时前端只有这几个页面,后端开发方面,有登录,注册,完善用户信息,获取用 ...
- Vue、Nuxt服务端渲染,NodeJS全栈项目,面试小白的博客系统~~
Holle,大家好,我是李白!! 一时兴起的开源项目,到这儿就告一段落了. 这是一个入门全栈之路的小项目,从设计.前端.后端.服务端,一路狂飙的学习,发量正在欣喜若狂~~ 接触过WordPress,H ...
- Vue、Node全栈项目~面向小白的博客系统~
个人博客系统 前言 ❝ 代码质量问题轻点喷(去年才学的前端),有啥建议欢迎联系我,联系方式见最下方,感谢! 页面有啥bug也可以反馈给我,感谢! 这是一套包含前后端代码的个人博客系统,欢迎各位提出建议 ...
- SpringBoot 整合 Elastic Stack 最新版本(7.14.1)分布式日志解决方案,开源微服务全栈项目【有来商城】的日志落地实践
一. 前言 日志对于一个程序的重要程度不用过多的言语修饰,本篇将以实战的方式讲述开源微服务全栈项目 有来商城 是如何整合当下主流日志解决方案 ELK +Filebeat . 话不多说,先看实现的效果图 ...
- 全栈项目|小书架|服务器端-NodeJS+Koa2实现首页图书列表接口
通过上篇文章 全栈项目|小书架|微信小程序-首页水平轮播实现 我们实现了前端(小程序)效果图的展示,这篇文章来介绍服务器端的实现. 首页书籍信息 先来回顾一下首页书籍都有哪些信息: 从下面的图片可以看 ...
- 全栈项目|小书架|服务器开发-NodeJS 使用 JWT 实现登录认证
通过这篇 全栈项目|小书架|服务器开发-JWT 详解 文章我们对JWT有了深入的了解,那么接下来介绍JWT如何在项目中使用. 安装 $ npm install jsonwebtoken 生成 Toke ...
随机推荐
- Linux下的网卡驱动程序的编写过程(转)
工作需要写了我们公司一块网卡的linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微软垄断的强有力武器,日益受到大家的喜爱.真希望她能在中国迅速成长.把程序文档贴出来,希 ...
- opendir函数
#include<sys/types.h> #include<dirent.h> DIR *dirptr = NULL; struct dirent *entry; dirpt ...
- 使用Ogre::ManualObject 绘制自定义图形
在ogre中如果需要进行自定义图形绘制可以使用ManualObject.例如绘制一个三角形的用法如下: SceneNode* pGridNode = m_pBaseNode->createChi ...
- BarTender是怎么做出雪花状文字
一些小伙伴在做标签时,发现有的人做的标签上的文字颜色不是纯色的,问我是怎么做的.这种雪花状文字要设置出来其实很简单,只要用到字体颜色填充工具就可以了.下面,小编就来给大家简单介绍一下BarTender ...
- 基于 Annotation 拦截的 Spring AOP 权限验证方法
基于 Annotation 拦截的 Spring AOP 权限验证方法 转自:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilte ...
- C#对象克隆介绍
浅拷贝和深拷贝 有两种对象克隆的方法:浅拷贝和深拷贝.浅拷贝只是复制引用,而不会复制引用的对象.深拷贝会复制引用的对象. 因此,原始对象中的引用和浅拷贝对象中的同一个引用都指向同一个对象.而深拷贝的对 ...
- 新增了个job
https://112.124.41.113/svn/wbhpro/wbh-adapter-job
- [Linux] - CentOS 安装nginx
linux版本:CentOS 6.0+ 安装nginx方法: 1.下载nginx rpm包命令: wget http://nginx.org/packages/centos/6/noarch/RPMS ...
- why happen "WaitHandles must be less than or equal to 64"
一.背景: 在一个项目中碰到大数据插入的问题,一次性插入20万条数据(SQL Server),并用200个线程去执行,计算需要花费多少时间,因此需要等200个线程处理完成后,记录花费的时间,需要考虑的 ...
- HDU 1789 Doing Homework again(贪心)
Doing Homework again 这只是一道简单的贪心,但想不到的话,真的好难,我就想不到,最后还是看的题解 [题目链接]Doing Homework again [题目类型]贪心 & ...