当前位置: 首页 > news >正文

前端工程师最好的全栈开发实践-设计开发属于自己的nodejs博客

我本是一名文科专业半路出家的前端开发人员,从最初只会切图和写CSS、Html到现在会写点JS,一路坑坑洼洼,也是经历了很多,从2010年开始就用WordPress开设了自己的博客,虽然内容零零散散的并不多,但是多多少少也留下了时光的缩影,一直希望自己有一个自留地。用Node.js做服务端替换WordPress是去年的一个想法,由于一直腾不出时间,所以拖到了现在。当然了WordPress作为全球用户量最广的开源博客程序,易用性等诸多好处无可厚非,光自己的博客在过去几年就用了很多套模板,也用它做过很多不同风格不同功能的网站, 也许Node.js不是个人博客的最好的开发语言选择,不管是情怀还是其他,我相信一定有前端开发人员跟我一样有想过这样的尝试。市面上开源的博客程序很多,UI模板也相当漂亮,但是自己开发一个属于自己的博客程序,没事的时候折腾折腾,可能会是一件比较美好的事情,最主要的目的是在其折腾的过程中,可以多尝试服务端的功能开发,这对从一个纯前端转向全栈开发工程师是非常好的实践。 git上面有很多开源的Node.js源码,教程也比较详细,有的功能全面,有的相对简约,当然每个人只要选择适合自己的就好,下面简单介绍下我的项目,从技术角度而言,深度有限,大神多提意见。

架构

项目沿用传统的MVC,比较古老的架构,model(对象模型),view(视图),controller(控制器),model通俗的说就是数据库表字段的映射,view就是界面,UI,controller就是操作数据库,一般是接收到路由信息,然后对数据库进行操作,再把数据返回给view层。如果是熟悉后端的开发人员可能一眼就看的懂,不过对于没有做过后端开发的纯前端人员来说,可能需要一些时间去消化。想起我第一次做全栈开发,一个存储CCTV配置数据的项目,基于c#和sqlserver,也是标准的MVC架构,很简单的增删改查,是废了不少功夫。

数据库

数据库这块用的MongoDB,为什么用它,因为简单好用,再就是它是在非关系数据中功能最丰富,最像关系数据库的。操作数据库的工具用了mongoose,api易读,很容易上手。之前是wordpress用的mysql,导出数据到MongdoDB确实没什么特别的好的方法和工具,尝试用了一些工具和脚本,效率不高,最后还是手工完成的,好在本人比较懒,那么多年没几篇内容。

WEB框架和模板

后端用了Express的web框架,页面渲染部分是handlebars模板,个人感觉{{}}大括号的写法比较适合前端开发人员,但是handlebars模板是个弱逻辑语言,有一些不方便,需要helper,特别是分页和评论,逻辑特别复杂,不过如果你喜欢hb模板,可以去git上下helper的库。jade模板(现在改成pug了)会比较方便一些,对一些复杂逻辑的处理比较高效,主要是可以直接在模板中写js语法,但是缩进的写法不是每个前端开发都能习惯的。

前端

如今的前后端分离,MV*框架,工程化,模块化,这些概念大行其道,如果一个做前端的不知道这几个概念,恐怕工作都难找到。但是这个项目没有前后端分离,直接在后端渲染页面,也没有用MVVM框架,工程化和模块化就更不用说了,后台页面用了一个jQuery和BootStrap和一些插件,前台页面好像就一个jQuery,CSS基本手写,我相信前端开发人员看到会比较亲切。我的初衷是希望通过这个项目了解更多后端开发思路和模式,其次个人博客是个传播源,在后端渲染也是为了利于SEO。

原理

我这里简单从一个页面打开到完全加载,程序做了哪些事去论述一下整个项目工作原理,当你打开博客的一个页面,node.js在后端通过路由机制(express提供的路由模块)去匹配到这个页面的url,然后查找对应的controller(就是处理这个URL的函数),在这个controller函数中,对数据库进行一些过滤筛选(用mongoose对数据库进行操作)最终拿到页面需要的数据,然后再把数据传递给对应的模板(handlebars),最终渲染成HTML。

由于时间仓促,博客的功能可能比较简陋,但是基本的功能已经满足了,另外项目也有很多没用到的函数和接口,来不及整理,留待以后扩展吧。博客demo 这是我的博客git地址github.com/frogo/blog,欢迎大家star和fork,

Screenshot

alt alt alt





原文发布时间:2018年06月29日
原文作者:frogo
本文来源 掘金,如需转载请紧急联系作者

相关文章:

  • eclipse创建android项目出现error libz.so.1: cannot open shared object file:No such file or directory...
  • 回溯法----背包问题
  • FTP攻略
  • __dopostback的用法
  • 保证应用程序只有一个实例运行
  • 活动目录系列之三:多域环境的实现(单站点)
  • linux添加开机自启动脚本示例详解
  • Web内容管理系统 Magnolia
  • CentOS6.4下Mysql数据库的安装与配置
  • 委托与事件的练习
  • 1-shell教程
  • 点击空白处键盘hide
  • 学习打卡-2018/07/19
  • 控件学习IOS开源项目(1)之RatingView星级评论控件学习
  • MapReduce剥洋葱
  • JavaScript-如何实现克隆(clone)函数
  • 【剑指offer】让抽象问题具体化
  • Java编程基础24——递归练习
  • Mithril.js 入门介绍
  • SegmentFault 2015 Top Rank
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Vue学习第二天
  • 后端_ThinkPHP5
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 设计模式(12)迭代器模式(讲解+应用)
  • 译自由幺半群
  • C# - 为值类型重定义相等性
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (转)Google的Objective-C编码规范
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Micro Framework初体验(二)
  • .NET Project Open Day(2011.11.13)
  • .NET 读取 JSON格式的数据
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 中创建支持集合初始化器的类型
  • .NET下的多线程编程—1-线程机制概述
  • .Net小白的大学四年,内含面经
  • @property python知乎_Python3基础之:property
  • @Resource和@Autowired的区别
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • []串口通信 零星笔记
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [c++] C++多态(虚函数和虚继承)
  • [Deep Learning] 神经网络基础
  • [ES-5.6.12] x-pack ssl