我们的博客平台上想显示所有的标签列表。如果用关系型数据库,标签需要自己的一张表,每一行存储相关的博文ID。MongoDB和Mongoose可以很容易地实现这个功能,而不需要做大的改动。
首先,我们为标签系统创建自己的路由对象。
新建routes/api/tags.js
文件:
const router = require('express').Router();
const mongoose = require('mongoose');
const Article = mongoose.model('Article');
module.exports = router;
并注册到API主路由上。往routes/api/index.js
里加入:
router.use('/profiles', require('./profiles'));
router.use('/articles', require('./articles'));
// +++
router.use('/tags', require('./tags'));
// +++
```js
接下来就是见证奇迹的时刻了。合用Mongoose提供的`[Model.find](http://mongoosejs.com/docs/api.html#find_find)`和[`Query.prototype.distinct`](http://mongoosejs.com/docs/api.html#query_Query-distinct)方法,可以很轻松地获取所有用到过的标签列表——既不需要新建模型,也不需要做数据库的迁移。
在`routes/api/tags.js`中加入如下代码:
```js
router.get('/', (req, res, next) => {
Article.find().distinct('tagList')
.then(tags => res.json({tags}))
.catch(next);
});
网友评论