How do I return only selected certain fields in Strapi?

被刻印的时光 ゝ 提交于 2019-12-10 20:56:54

问题


Pretty straightforward (I hope). I'd like to be able to use the API endpoint and have it only return specified fields. I.E. something like this

http://localhost:1337/api/reference?select=["name"]

Would ideally return something of the form

[{"name": "Ref1"}]

Unfortunately that is not the case, and in actuality it returns the following.

[
{
"contributors": [
{
"username": "aduensing",
"email": "standin@gmail.com",
"lang": "en_US",
"template": "default",
"id_ref": "1",
"provider": "local",
"id": 1,
"createdAt": "2016-07-28T19:39:09.349Z",
"updatedAt": "2016-07-28T19:39:09.360Z"
}
],
"createdBy": {
"username": "aduensing",
"email": "standin@gmail.com",
"lang": "en_US",
"template": "default",
"id_ref": "1",
"provider": "local",
"id": 1,
"createdAt": "2016-07-28T19:39:09.349Z",
"updatedAt": "2016-07-28T19:39:09.360Z"
},
"updatedBy": {
"username": "aduensing",
"email": "standin@gmail.com",
"lang": "en_US",
"template": "default",
"id_ref": "1",
"provider": "local",
"id": 1,
"createdAt": "2016-07-28T19:39:09.349Z",
"updatedAt": "2016-07-28T19:39:09.360Z"
},
"question": {
"createdBy": 1,
"createdAt": "2016-07-28T19:41:33.152Z",
"template": "default",
"lang": "en_US",
"name": "My Question",
"content": "Cool stuff, huh?",
"updatedBy": 1,
"updatedAt": "2016-07-28T19:45:02.893Z",
"id": "579a5ff83af4445c179bd8a9"
},
"createdAt": "2016-07-28T19:44:31.516Z",
"template": "default",
"lang": "en_US",
"name": "Ref1",
"link": "Google",
"priority": 1,
"updatedAt": "2016-07-28T19:45:02.952Z",
"id": "579a60ab5c8592c01f946cb5"
}
]

This immediately becomes problematic in any real world context if I decide to load 10, 20, 30, or more records at once, I and end up loading 50 times the data I needed. More bandwidth is used up, slower load times, etc.


回答1:


This feature is not implemented in Strapi yet. To compensate, the best option for you is probably to use GraphQL (http://strapi.io/documentation/graphql).

Feel free to create an issue or to submit a pull request: https://github.com/wistityhq/strapi




回答2:


I know this is old thread but I just run into exactly same problem and I could not find any solution. Nothing in the docs or anywhere else.

After a few minutes of console logging and playing with service I was able to filter my fields using following piece of code:

const q = Post
  .find()
  .sort(filters.sort)
  .skip(filters.start)
  .limit(filters.limit)
  .populate(populate);

return filterFields(q, ['title', 'content']);

where filterFields is following function:

function filterFields(q, fields) {
  q._fields = fields;
  return q;
}

It is kinda dirty solution and I haven't figured out how to apply this to included relation entites yet but I hope it could help somebody looking for solution of this problem.

I'm not sure why strapi does not support this since it is clearly capable of filtering the fields when they are explicitly set. it would be nice to use it like this:

return Post
      .find()
      .fields(['title', 'content'])
      .sort(filters.sort)
      .skip(filters.start)
      .limit(filters.limit)
      .populate(populate);


来源:https://stackoverflow.com/questions/38647775/how-do-i-return-only-selected-certain-fields-in-strapi

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!