前言:
预览:
开始:
npm i
把mysql配置好
npm run server or npm run dev
实现功能:
用户: 登录、注册、用户资料修改,详情页面,类似于简书的文章数量、总字数、收获的喜欢总数,文章删除。
文章:文章详情页面,查看,评论,点赞和踩,文章阅读次数统计
文章: 所有文章,支持分页和按关键词、时间查找
文章书写:支持markdown和图片拖拽上传
首页: 文章推荐,作者推荐,首页轮播,顶部搜索文章和用户
ssr 效果预览:
类似于知乎的
seo 效果:
待补充
1 技术栈:
前端:axios、element-ui、nuxt.js、 ts
后端:node.js、hapi.js、sequelize(orm)、 hapi-auth(token)、 hapi-swagger(在线api文档)、hapi-pagination(分页)、joi(前端请求数据检验类似于element的表单校验)、 mysql 和其他插件
2 技术细节介绍:
说明: 本文主要侧重后端,最后的效果类似于我司后端
目录结构:
├── assets // 静态资源,css, 图片等
├── client // 客户端目录,axios请求函数和其他辅助函数
├── components // vue组件目录
├── config // 默认设置
├── layouts // nuxt视图
├── middleware // nuxt 中间件
├── migrations // orm 数据迁移
├── models // orm 数据模型
├── nuxt.config.js
├── nuxt.config.ts
├── package-lock.json
├── package.json
├── pages // nuxt
├── plugins // hapi插件和nuxt插件
├── routes // hapi路由
├── seeders // 种子数据
├── server // app.js
├── static // 静态资源
├── store // nuxt
├── tsconfig.json
├── uploads // 文件上传目标目录
└── utils // 辅助函数
前言:为什么是hapi.js ?
hapi官方文档已经说了很多了(expresstohapi),这里最吸引我的是,不用安装很多的插件(expres的话有很多的xx-parse插件...),就能满足我的需求,而且hapi已经应用于商用了。
注意点:
我的这些代码,在我目前的package.json的版本是能正常运行的,hapi版本大版本有时候会出现不兼容的,不同版本的hapi对应着不同的插件版本,所以需要和我的版本保持一致,我还遇到过nuxt.js v2.9运行加入ts出现不识别@component的情况,安装2.8.x版本就没有问题。
2.1 Sequelize建模
开发后台第一个想到的是建立数据模型(建表),默认你已经安装好了mysql
之前我自己用数据库,不知道有orm这个工具的时候,会选择自己用navicat这样的图形化工具建表或者直接用sql语句建表。这样做有几个缺点:
对数据库的操作记录不明确,我新建一个表或者新增字段,我后悔了,删掉,我又后悔了,orm的数据迁移就可以用来做这些事情类似于git。
迁移新环境,用sql操作很麻烦,直接执行orm的命令自动建表。
数据模型,之前后台程序与mysql联系的时候,仅仅在建立了连接池,数据的关系,表结构这些我们其实并不知道。
执行增删改查代码更简洁清晰
其他
注意:用orm在执行sql操作时,相当于我们用jquery执行dom操作,api简单了,但还是需要对原来的有点了解
sequelize
sequelize就是node.js的promise orm工具,同时也支持其他数据库.
使用
安装插件:
npm i sequelize-cli -D
npm i sequelize
npm i mysql2
sequelize init
通过 sequelize-cli 初始化 sequelize,我们将得到一个好用的初始化结构:
// 可以安装npx
node_modules/.bin/sequelize init
├── config # 项目配置目录
| ├── config.json # 数据库连接的配置
├── models # 数据库 model
| ├── index.js # 数据库连接的样板代码
├── migrations # 数据迁移的目录
├── seeders # 数据填充的目录
config/config.json
默认生成文件为一个 config.json 文件,文件里配置了开发、测试、生产三个默认的样板环境,我们可以按需再增加更多的环境配置。这里我用config.js替代config.json,这样配置更加灵活
修改后的 config/config.js 如下,仅预留了 development(开发) 与 production(生产) 两个环境,开发环境与生产环境的配置参数可以分离在 .env 和 .env.prod 两个不同的文件里,通过环境变量参数 process.env.NODE_ENV 来动态区分。
// config.js
if (process.env.NODE_ENV &