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

Feathers JS如何自定义get服务端点 为get返回结果添加自定义数据

问题场景

基于feathers-sequelize实现Users服务类,重写get方法后需要为用户请求结果附加关联服务对应URL等自定义数据,初始代码如下:

const { Service } = require('feathers-sequelize')

exports.Users = class Users extends Service {
  get(id, params) {
    // how to add custom data into to the get result?
    return super.get(id, params)
  }
}
实现方法

super.get(id, params)会返回Promise,resolved后是接口查询到的原始用户数据,只需要拿到原始数据后追加自定义字段,再将修改后的数据返回即可。

写法1:async/await(推荐,可读性更高)

const { Service } = require('feathers-sequelize')

exports.Users = class Users extends Service {
  async get(id, params) {
    // 获取父类方法返回的原始用户数据
    const user = await super.get(id, params)
    // 追加关联服务URL等自定义数据
    user.links = {
      orders: `/users/${id}/orders`,
      posts: `/users/${id}/posts`,
      profile: `/users/${id}/profile`
    }
    // 可根据业务需求追加任意其他自定义字段
    return user
  }
}

写法2:Promise链式调用

const { Service } = require('feathers-sequelize')

exports.Users = class Users extends Service {
  get(id, params) {
    return super.get(id, params).then(user => {
      // 追加自定义数据
      user.links = {
        orders: `/users/${id}/orders`,
        posts: `/users/${id}/posts`
      }
      return user
    })
  }
}

特殊情况处理

如果sequelize配置返回的是模型实例而非普通JS对象,直接追加属性可能不会被序列化到最终响应中,此时需要先将实例转为普通对象再修改:

async get(id, params) {
  const userInstance = await super.get(id, params)
  // 转为普通JS对象
  const user = userInstance.toJSON ? userInstance.toJSON() : { ...userInstance }
  // 追加自定义字段
  user.links = {
    orders: `/users/${id}/orders`
  }
  return user
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:18:15