Skip to content

我用了30天完成了我的个人网站--Express #17

@stack-wuh

Description

@stack-wuh

我用了30天完成了我的个人网站--Express

四天之前我开始迁移我的Github中的issue, 把我之前的日记迁移到了微信公众号和服务器, 中间遇到了富文本迁移的时候, 样式差异大的问题, 于是我换回了Markdown.

所以有了之前几篇的关于Markdown的踩坑记录, 自定义处理了一下前台渲染时的样式. 第一期的开发到这里基本就全部结束了, 现在它们上线了.

后台我用的是Node, 搭配的是node社区常见的技术, 如下:

  1. Express
  2. MongoDB--mongoose
  3. jwt--jsonwebtoken
  4. multer
  5. bcryptjs

Express

为什么选择了Express这么一个框架呢? 我的考虑有以下几点, 总结一下:

  • 资格老, 代表着资料多, 我将会遇到的问题已经有了解决方法, 我可以踩着前人的脚步前进
  • 接触最早, 我在几年前就接触过, 只不过没有一直坚持下去
  • Nodejs的中文社区里面已经有了很成熟的写法, 包括cnodejs.org的后台就是Express
  • 深度的了解Nodejs, 我是一个前端, 一直在使用着Nodejs, 却没有深度的学习, 直接上项目是了解它的最快方式

Nodejs与前端息息相关, 比如说: npm, webpack. 为什么我说我一直在使用着Node, 因为脚手架里面那几条经典的命令:

npm install vuex 
npm view vuex

npm run start
npm build

慢慢的我了解到了一个名词叫做环境变量NODE_ENV, 于是我开始自定义脚本, 我想开启Mock服务器我就可以敲 npm run start:mock, 现在我需要发布测试包我可以敲 npm run build:test

再后来打包的体积太大了, 严重的影响了网站的加载速度, 我需要优化打包我的项目包, 于是我开始使用webpack提供的插件了.

所以每一个前端都离不开Nodejs, 既然离不开那就好好学习它!!!

MongoDB与Mongoose

既然是后台开发肯定是离不开数据库的, 因为我做的并不是云应用, 没有给我那种技术支持, 使我不用自己开发Api. 那么对于数据库, 我选择了MongoDB.

Mongodb是什么? 它是一个NoSql, not only sql. 底层基于c++, 是不是有点眼熟呢?

当然使用原生的api写起来稍微有一点点繁琐, 比如对于一个文档的查询:

    db.collection.find(query) 

    db.collection.find({ name: 'shadow', age: 20 }) 

    db.collection.find({ gendor: 1, age: { $gt: 20 } })

在设计文档的结构时缺少了sql中对value的强限制, api的操作过于繁琐, 于是乎有了类似于mongoose的驱动, 让我们可以在Nodejs通过npm直接使用.

在开始学习时我使用的原生api, 现在我使用mongoose. 为什么使用mongoose, 有几点原因:

  • Schame 可以清楚的定义文档结构
  • Modal 作为Schema的实例, 可以高效的使用api
  • SchemaTypes 字段的类型有了一个强定义
  • 简洁的, 多样的, 阅读性高的api

我就不过多的描述了, 已经贴上了官网的地址, 可点击链接去查看一下它提供的api. 以后也会一边学习mongoose的玩法, 一边更新文档, 有兴趣的可以一起学习, 共同进步.

jwt -- jsonwebtoken

一种鉴权的实现, 现在的鉴权大概有这么几种:

  • cookie缓存
  • oAuth三方认证
  • jwt令牌

前端在于服务器端交互时, 在涉及到访问权限时, 处理的方式也有以下几种:

  • cookie
  • 在发起get/post请求时, 表单新增参数token, 值为后台动态返回的token值
  • 在headers中添加Authorization, 用到的就是token令牌

现在我用的就是jwt, 说到这里我一定要正式向一个老哥道谢, 他是一个老外Andela, 他写了一篇博客就是介绍JWT Authorization, 但是不仅仅是JWT, 而是介绍了Express+Mongoose+JWT用法, 而且非常用心的分析了代码, 标注了使用步骤.

如果碰巧你也是一个node新手, 也想写一写后台应用, 应该去看一看JWTAuthorization

multer -- 文件上传

既然是一个后台, 怎么可能没有文件上传这个必不可缺的功能呢. 社区里面使用的比较多的文件上传中间件那就是multer.

我从未接触过后台, 我印象中的文件上传是一个很复杂的功能, 比如说: 上传文件类型的限制, 进度条的实现, 大文件的分片上传, 以及前端的断点续传. 你看其实文件上传的内容并不少吧.

但是有了这么一个中间件以后, 我所需要的工作就是, 配置一下上传的文件夹, 然后按照我的想法重置一下文件名, 之后结束.

我为了文件上传这么一个功能准备了一天, 我一直在社区里面看文档, 比较不同中间件的玩法, 让我没想到的是收尾原来这么简单.

bcryptjs -- 零依赖的加密库

这个没有好讲啦, 我只用在了一个位置, user_password加密.

现在终于讲完了后台系统的基本结构, 做一个总结吧:
1. 在没有尝试的前提下, 不要小瞧任意一种技术, 不要轻谈它的难易程度
2. 在没有尝试的前提下, 不要请看任意一个功能点
3. talk is cheap, show me code

最后贴上几篇博客:

还分不清 Cookie、Session、Token、JWT?

HTTP灵魂之问,巩固你的 HTTP 知识体系

多维度分析 Express、Koa 之间的区别

学习 koa 源码的整体架构,浅析koa洋葱模型原理和co原理

MongoDB,我的道

Metadata

Metadata

Assignees

Labels

Nodeweb server

Projects

Status

javascript

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions