likes
comments
collection
share

深入 Egg.js:实现用户频道详情获取

作者站长头像
站长
· 阅读数 69

在这篇文章中,我们将详细介绍如何在 Egg.js 中实现用户频道详情的获取。通过创建路由、定义模型、完善控制器,我们一步步构建这个功能,并通过 Postman 验证其正确性。

创建路由

首先,我们需要在 app/router.js 中定义一个新的路由:

module.exports = app => {
  const { router, controller } = app;
  const auth = app.middleware.auth()
  // 添加前缀
  router.prefix('/api/v1')
  // 用户频道
  router.get('/users/info/:userId', auth({required: false}), controller.user.userInfo)
};

这个路由定义了一个 GET 请求,用于获取用户的频道信息,并使用 auth 中间件进行认证。

创建模型 model/subscribe.js

接下来,我们需要定义一个新的 Mongoose 模型,用于存储用户的订阅信息:

// app/model/subscription.js
module.exports = app => {
    const mongoose = app.mongoose
    const Schema = mongoose.Schema
  
    const subscribeSchema = new Schema({
      user: { // 订阅用户
        type: mongoose.ObjectId,
        ref: 'User',
        required: true
      },
      channel: { // 订阅频道
        type: mongoose.ObjectId,
        ref: 'User',
        required: true
      },
      createdAt: { // 创建时间
        type: Date,
        default: Date.now
      },
      updatedAt: { // 更新时间
        type: Date,
        default: Date.now
      }
    })
  
    return mongoose.model('Subscribe', subscribeSchema)
}

这个模型定义了用户订阅频道的基本结构,包括订阅用户、订阅频道、创建时间和更新时间。

完善控制器 controller/user.js

然后,我们需要在控制器中实现获取用户频道详情的逻辑:

const Controller = require('egg').Controller
class UserController extends Controller {
  async userInfo() {
    const registerUserId = this.ctx.user ? this.ctx.user._id : null
    const userId = this.ctx.params.userId
    const { Subscribe, User } = this.app.model
    let isSubscribe = false
    if (registerUserId) {
      const subscribe = await Subscribe.findOne({
        user: registerUserId,
        channel: userId
      })
      if (subscribe) {
        isSubscribe = true
      }
    }

    let userInfoDb = await User.findById(userId)
    let userInfo = userInfoDb._doc
    userInfo.isSubscribe = isSubscribe
    this.ctx.body = userInfo
  }
}

module.exports = UserController

这个控制器方法 userInfo 首先检查当前用户是否已登录,然后查询用户是否订阅了该频道,并返回用户信息及订阅状态。

使用 Postman 验证

最后,我们使用 Postman 对这个接口进行测试,确保其功能正常。测试步骤如下:

  1. 启动服务并打开 Postman。
  2. 发送 GET 请求到 http://localhost:7001/api/v1/users/info/{userId}
  3. 检查返回的数据,验证用户信息和订阅状态是否正确。

深入 Egg.js:实现用户频道详情获取

总结

在本文中,我们通过创建路由、定义 Mongoose 模型、实现控制器逻辑,完成了 Egg.js 中获取用户频道详情的功能。通过这一系列操作,我们可以更好地理解如何在 Egg.js 中构建复杂的业务逻辑,提升开发效率和代码质量。

转载自:https://juejin.cn/post/7377217883305328678
评论
请登录