gpt4 book ai didi

javascript - 如何在 API 中包含字段而不在数据库中添加键/值?

转载 作者:行者123 更新时间:2023-12-03 07:10:40 26 4
gpt4 key购买 nike

我正在寻找一种方法 Strapi API 返回一个键/值对,它被计算并添加到服务器响应中,但不从数据库中获取:
我使用 ApolloServer 做了类似的事情与 Prisma .如果你想知道我是怎么做的?然后这是我的设置:

Note: I am not looking for how slug feature in Strapi but in general I like to know how dynamic/calculate fields can be added to Strapi API Server response.


文件: ./src/resolvers/Team.js
const Team = {
slug(parent) {
return parent.title.replace(/\s+/g, '-').toLowerCase();
},
};

export { Team as default };
文件: ./src/resolvers/index.js
import { 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.js
import { 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.graphql
type 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。

最佳答案

I like to know how dynamic/calculate fields can be added to Strapi API Server response


基本上你正在寻找一个 Custom data response ,很可能与自定义端点结合使用(因为您不想覆盖现有端点)。
你可以通过扩展现有的 API 来做到这一点,让我们分解一下:
  • 添加自定义 API 端点
    一种。添加路由
    湾添加处理程序
    C。 Add permissions
  • 运行一些逻辑
  • 返回自定义响应

  • (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使用逻辑开始并添加值的方法( this is a great example ):
      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
    欢迎提问

    关于javascript - 如何在 API 中包含字段而不在数据库中添加键/值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63153491/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com