Javascript 从JSON服务器端点获取记录数

Javascript 从JSON服务器端点获取记录数,javascript,json,Javascript,Json,我正在创建一个以JSON服务器为后端的模拟应用程序,我想知道是否有可能在不加载所有记录的情况下获得一个端点包含的记录总数?假设db.json文件看起来像下面的json片段,如果可能的话,我如何发现端点只有一条记录而不获取记录本身 { "books": [{ "title": "The Da Vinci Code", "rating": "0"}] } 您将编写另一个返回记录数的端点。通常,您可能还希望限制和偏移的端点与分页一起使用。您有三个选

我正在创建一个以JSON服务器为后端的模拟应用程序,我想知道是否有可能在不加载所有记录的情况下获得一个端点包含的记录总数?假设db.json文件看起来像下面的json片段,如果可能的话,我如何发现端点只有一条记录而不获取记录本身

    {
      "books": [{
      "title": "The Da Vinci Code",
      "rating": "0"}]
    }

您将编写另一个返回记录数的端点。通常,您可能还希望限制和偏移的端点与分页一起使用。

您有三个选项。我向您推荐第三个:

  • 返回所有记录并进行计数。这可能会很慢,而且会通过网络发送大量数据,但可能是对您最小的代码更改。它还使您容易受到攻击,人们可以通过反复请求许多记录来攻击您的服务器

  • 添加新端点。您可以添加一个只返回计数的新端点。有第二个端点来记录和维护很简单,但有点烦人

  • 修改现有端点。返回类似于

  • 
    {
    计数:157,
    行:[……数据]
    }
    


    3的好处是它的所有在一个端点。它还使您可以在将来添加
    skip
    take
    参数,以允许对结果数据进行分页。

    您只需检索
    X-Total-Count
    标题即可

    这是启用分页时JSON服务器返回的响应标题的屏幕截图,即使用
    \u page
    参数(例如
    localhost:3000/contacts?\u page=1


    无论何时获取数据,json服务器都会默认返回总计数(它有一个
    x-total-count
    属性:

    例如:

    axios
      .get("http://localhost:3001/users", {
        params: {
          _page: 1,
          _limit: 10
        }
      })
      .then(res => {
        console.log(res.data); // access your data which is limited to "10" per page
        console.log(res.headers["x-total-count"]); // length of your data without page limit
      });
    

    我不确定我是否理解正确,你想返回属性数吗?如果是,你可以解析它并返回键数。不,我只是想知道我是否可以使用这样的查询字符串来获得记录总数。文档中没有关于它的内容,所以可能不可能,在这种情况下,我只需要f蚀刻所有记录,并找出有多少记录是这样的。我问这个问题的原因是因为我想使用分页功能,但我不认为如果我不首先获取所有记录就无法获得记录的总数会有什么用处。你能给我一个使用JSON服务器的例子吗?@Happy Koala你找到了吗了解如何编写端点以获取计数和行数?@erwin是的,我确实这样做了!我接受了Ian的第三个建议。有更好的方法吗?w json服务器,在使用_start、_end、_limit时,响应在头中包含一个X-total-count,因此我们在第一个请求中获得总计数……我不再需要将其包含在t中json文件…也许这不再是真的。我在本月早些时候设置了json服务器,当我将所有标题写到控制台时,没有总计数。啊,从文档中可以看出:“添加_start和_end或_limit(响应中包含一个X-total-count标题)”。所以它并不总是存在,就在发送其中一个参数时。
    let response = await fetch("http://localhost:3001/books?_page=1");
    let total = response.headers.get('X-Total-Count');