You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express框架中与模型交互的方法是如何挂载到req.user上的?

代码功能解释

你看到的req.user.getCompany()确实是和数据模型交互的数据库查询代码,这个项目采用Sequelize作为ORM(对象关系映射)框架,这段代码的作用是查询当前登录用户归属的公司数据,传入的scope参数指定了两个预定义的查询规则:with_active_users会关联查询公司下的激活用户,order_by_active_users会将查询结果按激活用户排序。

getCompany方法的挂载逻辑

getCompany是Sequelize框架自动生成的关联查询方法,不需要开发者手动挂载,具体生成逻辑分为两步:

  • 第一步是模型关联声明:项目的模型层会定义User模型和Company模型的多对一关联关系,核心代码大致如下:
// User模型定义文件
User.belongsTo(models.Company, {
  as: 'company',
  foreignKey: 'company_id'
})
// Company模型定义文件
Company.hasMany(models.User, {
  as: 'users',
  foreignKey: 'company_id'
})

只要定义了belongsTo关联,Sequelize就会自动为每个User实例生成get[关联别名]的实例方法,这里关联别名为company,所以生成的方法就是getCompany()。

  • 第二步是req.user的生成:项目采用Passport.js做用户身份校验,用户登录成功后,Passport会自动把当前登录用户的Sequelize实例挂载到请求对象req上,也就是你用到的req.user,因此你可以直接在路由中调用该实例的内置方法执行查询。

内容的提问来源于stack exchange,提问作者Alexander Solonik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 14:36:07