全栈开发博客系统(nodejs+vuejs+mongodb) (2)

接下来新建一个文件夹db,然后新建db.js文件:

module.exports = app => { const mongoose = require('mongoose') mongoose.connect('mongodb://localhost:27017/myblog', { useNewUrlParser: true }) }

mongodb安装完后默认会在27017端口启动,myblog是我们给数据库的命名。

然后在index.js文件中需要引入db.js。

require('./db/db')(app) 创建模型

新建models文件夹,在文件夹下新建Category.js作为分类的模型。

const mongoose = require('mongoose') const schema = new mongoose.Schema({ title: {type: String} }) module.exports = mongoose.model('Category', schema)

暂时只定义一个分类名称 "title"

数据查询

在routers/admin/index.js中通过以下代码就可以查询categories表中的数据。

// 获取分类列表 router.get('/categories', async (req, res) => { const res = await Category.find() res.send(res) })

当在浏览器中输入 ":3000/admin/api/rest/categories" 即可得到categories表的数据。

好了,通过以上的介绍,我们应该能够实现一些简单的增删改查操作。

中间件

开发的过程中,我们一定会遇到一个问题。

前面提到,后端admin主要包括三大模块:分类管理、文章管理、用户管理。

每一个模块都会涉及增删改查操作。如果我们为每一个模块都定义一套自己的增删改查接口,势必会产生很多重复代码,而且如果是分类比较多的情况,重复代码会更加严重。所以这里可以考虑自定义一个中间件。

首先新建一个文件夹middleware,然后新建resource.js文件(我们可以把每个分类都理解为资源),统一对资源进行增删改查操作,唯一的不同是资源名称。

module.exports = options => { return async (req, res, next) => { const inflection = require('inflection') const modelName = inflection.classify(req.params.resource) req.Model = require(`../models/${modelName}`) next() } }

这里用到了inflection库,需要先安装一下,然后用inflection.classify把传入的参数转为单数形式,作为模型的名称。

然后将routers/admin.index.js改为以下方式

// 获取资源 router.get('http://www.likecs.com/', async (req, res) => { const data = await req.Model.find() res.send(data) }) app.use('/admin/api/rest/:resource', resourceMiddleware(), router)

好了,由于篇幅有限,其他的一些内容就暂不介绍了,详细代码可以参考GitHub。

博客前端展示(web) 项目构筑

这部分和admin差不多,新建web项目,需要集成router,但不需要element-ui,具体可以参照上文后端管理系统的项目构筑介绍。

主题选择

主题部分我是直接从Jekyll Themes主题库中选取的一个,由于时间没那么多,再加上是自己做着玩,所以偷个懒。在这里贴出原作者 Liberxue。

访问量统计

访问量统计这里用到了一个免费的开源库不蒜子,非常轻量级,使用起来也很简单。

主页面

全栈开发博客系统(nodejs+vuejs+mongodb)

结尾

好了,暂时就先介绍这么多吧,还有很多内容就不一一展开了。如果大家有疑问可以留言。

由于本人是前端出身,做了六七年前端了。后端也是刚刚接触不久,所以上文前端部分介绍的可能会少一些,相对后端会多些,如果有哪些错误的地方欢迎指正。

源码已经开源到GitHub, 如果您觉着对自己还有些帮助,希望能给个Star。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjygp.html