[原创] 如何开发一个博客(升级中)

作者 : 开心源码 本文共2009个字,预计阅读时间需要6分钟 发布时间: 2022-05-12 共100人阅读

一、概要

这篇文章不打算用很细致的形容来说明如何创立一个博客,而是从原理的角度来让有兴趣的人知道如何开始。(下文都是我自己从一个后台的角度来了解的,有些说法不肯定精确,但是原理可以保证无误)。
具体可以参考我的博客实现:cool-blog 一个非常轻量级的博客实现

二、基础概念

短链接

浏览器每次查看页面的操作都是重新发起链接的,即是俗称的短链接。很显然,这是个无状态的过程。

路径/path

对于这样的一个地址 www.baidu.com/find,那么/find 就是我们的路径,一般处理路径的分发,我们称呼他为路由route

方法

浏览器的请求有很多种:

  • get:请求,一般用于查询
  • post:升级,例如表单
  • put:创立,例如新建资源
  • delete:删除

以上对四种方法的了解以及应用规范,可以参考restful api的设计,它将所有的网络页面(这里说法不够准确)都了解为资源,那么所有的操作都是对应于如何操作资源的。

查询

对于这样的地址www.baidu.com/find?a=1&b=2,那么问号之后就是查询,路径和查询构建成了地址中静态和动态的两部分(当然,使用的时候,不用拘泥于此)

消息体

用户端和服务端之间需要传递大量的数据,此时会放在http的主体中

模版

浏览器会根据服务端发回来的html代码正确的渲染页面,而模版则是处理”如何最省力的返回html代码”的方案。

cookies 和 session

对于服务端而言,用户端发起的每次链接都是全新的,那么服务端就没法做出状态来,而相似登陆这种操作是需要状态,处理这类问题的手段就是cookie和session。

cookies

  • 存在于http协议中的cookie字段中,在每次的请求,浏览器都会补充上这个字段,传到服务端,而后服务端再传回来,整个过程就如同乒乓球一样,不停的来回
  • 它用于伪造一个相似于长连接的标识,所以正常做法是只要要保存一个唯一的id既可以最大化使用,这样也可以减少网络传输的消耗

session

对于服务端而言,处理了长连接的概念,那很多东西都开始变得简单起来了。而session 可以了解为是服务端对于长连接的进一步具化,将cookie代表的长连接映射为一个对象,那么这个对象即可以拿来存放东西了。

两者结合起来的例子:登陆

  • 客户第一次打开页面,此时服务端生成唯一的id存放到cookie中,此时对应的session开始产生
  • 客户输入客户名和密码,服务端验证通过,此时可以将对应的客户id存放进去session
  • 客户重新打开这个界面(或者者任何需要登陆的页面),检查session能否存放了客户id,假如有那么允许,假如没有,那么跳转到登陆界面。

三、技术选型

基础语言

nodejs:这是后台的必然选择了

基本框架

koa:一个非常现代的后台开发框架,他的中间件的理念让我挺佩服的

模版

art-template: 腾讯出品,使用非常舒服

中间件(只列出重要的部分)

  • 路由:koa-router
  • cookies和session:koa-session-minimal
  • 消息体:koa-bodyparser

四、架构设计

分层

复杂的层次会导致逻辑混乱,而在nodejs提供的底层已经完好的情况下,我们可以减少分层,例如 server + module 一共两层

组合

多使用组合可以减少层次的添加,更容易了解。为什么不使用面向对象的开发方法呢?由于要正确的使用面向对象,必需正确的笼统概念,而笼统能力不是每个人都具有的。组合的概念表现在架构中体现为板块:module

可见性

板块之间互相可见,他们是平等关系,而server层作为基础,都可以被板块调用

板块的数据以及实现

数据和实现的分离有利于划分职责,并且做热升级的时候更加自然(毕竟数据不可热升级,只有实现可以)

路由

路由的地位等同于板块,但是他和板块又有很多不一样的地方

五、文件架构

这里只是给出我自己的版本,没必要肯定要按照这样的方式来写

  • index.js:所有的文件夹都应该有这个文件,用于正确的require
  • config:文件夹,里面存放了开发期以及发布后的配置
  • content:存放少量上传的,或者者是静态文件
  • kernel:少量工具类的存放,和业务无关
  • server:业务代码
    • core:少量需要扩展到server层的代码
    • data:存放板块的数据
    • impl:存放板块的实现
    • routers:存放各种路由

六、前后台分离

我了解的前后台分离应该是后台只考虑数据,前台只考虑布局,但是假如这样开发,为了可以有良好的seo,就必需将这两部分拼凑起来,再发给浏览器,开发比较繁琐,本文只是部分实现了

module/板块

只解决数据的内容

routers

在这里将布局和数据拼凑起来,发送给前台

七、整体规划

页面基本布局

  • 上:导航
  • 中:内容
  • 下:底部

功能划分(只列出基础部分)

  • 首页
  • 文章列表
  • 文章详细页
  • 后端管理
    • 登录
    • 文章列表
    • 增加文章
    • 修改文章
    • 删除文章

待补充

其实写到这里,有关设计方面的已经写完了,至于具体的实现则是后面再补充了。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » [原创] 如何开发一个博客(升级中)

发表回复