为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不在数据库中添加键/值的情况下在 API 中包含一个字段?

如何在不在数据库中添加键/值的情况下在 API 中包含一个字段?

www说 2022-12-09 17:11:45
我正在寻找一种 Strapi API 返回键/值对的方法,该键/值对被计算并添加到服务器响应但不从数据库中获取:ApolloServer我用with做了类似的事情Prisma。如果你想知道我是怎么做到的?然后这是我的设置:注意:我不是在寻找slugStrapi 中的功能,但总的来说我想知道如何将动态/计算字段添加到 Strapi API 服务器响应中。文件:./src/resolvers/Team.jsconst Team = {  slug(parent) {    return parent.title.replace(/\s+/g, '-').toLowerCase();  },};export { Team as default };文件:./src/resolvers/index.jsimport { extractFragmentReplacements } from 'prisma-binding';import Query from './Query';import Mutation from './Mutation';import Team from './Team';const resolvers = {  Query,  Mutation,  // static  Team,};const fragmentReplacements = extractFragmentReplacements(resolvers);export { resolvers, fragmentReplacements };文件:./src/prisma.jsimport { Prisma } from 'prisma-binding';import { fragmentReplacements } from './resolvers/index';require('dotenv').config({ path: './.env' });const prisma = new Prisma({  typeDefs: 'src/generated/prisma.graphql',  endpoint: process.env.API_URL,  secret: process.env.PRISMA_MANAGEMENT_API_SECRET,  fragmentReplacements,});export { prisma as default };文件:./src/schema.graphqltype Team {  id: ID!  title: String!  color: String!  slug: String! // this is not in Db but taken care by `./src/resolvers/StaticTeam.js`}正如您在上面看到的,我如何获得slug不在数据库中的数据。我只是喜欢将计算key:val添加到我的 API 中。
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

我想知道如何将动态/计算字段添加到 Strapi API 服务器响应

基本上您正在寻找自定义数据响应,很可能与自定义端点结合使用(因为您不想覆盖现有端点)。

您可以通过扩展现有的 API 来做到这一点,让我们分解一下:


  1. 添加自定义 API 端点 添加路由
    B. 添加处理程序
    C. 添加权限

  2. 运行一些逻辑

  3. 返回自定义响应

(1) 要将自定义 API 端点添加到用户定义的内容类型,您需要 (a) 在以下目录中添加路由:

./api/{content-type}/config/routes.json

像这样(在路由数组中):

{

  "method": "GET",

  "path": "/teams/customData",

  "handler": "team.findCustomHandler",

  "config": {

    "policies": []

  }

}

(b) 在以下目录中添加一个方法:


./api/{content-type}/controllers/{Content-Type}.js

像这样:


'use strict';

module.exports = {

    async findCustomHandler(ctx) {

      //your logic here

    }

};

您可以使用原始的find方法开始并使用您的逻辑添加您的值(这是一个很好的例子):


  async find(ctx) {

    let entities;

    if (ctx.query._q) {

      entities = await strapi.services.team.search(ctx.query);

    } else {

      entities = await strapi.services.team.find(ctx.query);

    }

    // TODO: add your extra calculated value

    return entities.map(entity => {

    // You can do this here

    sanitizeEntity(entity, { model: strapi.models.restaurant }));

    }

  }

您可以查看的文档:
Extending a Model Controller

欢迎提问


查看完整回答
反对 回复 2022-12-09
  • 1 回答
  • 0 关注
  • 61 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信