【问题标题】:How to fetch all rows from objection.js如何从 objection.js 中获取所有行
【发布时间】:2021-06-29 11:37:03
【问题描述】:

我正在使用 Knex.js 和 Objection.js,我想显示国家/地区下拉列表,所以我需要所有行,但它只返回 10 行。如何覆盖分页功能?

我可以在 url localhost:3031/countires?pages='All' 中设置任何参数吗,应该有一些简单的方法。我正在使用 "knex": "^0.21.1", "objection": "^1.6.11" 版本。 default.js 包含

"paginate": {
    "default": 10,
    "max": 2000
  },

暂时我只是在 src\services\countries\countires.services.js 中进行了以下更改

module.exports = function (app) {
  const options = {
    Model: createModel(app),
    //paginate: app.get("paginate"),
    paginate: {
      default: 0,
      max: 0,
    },
  };

  // Initialize our service with any options it requires
  app.use("/countries", new Countries(options, app));

【问题讨论】:

    标签: knex.js objection.js


    【解决方案1】:

    如果我能看到您对这条路线的异议查询,那将会很有帮助。但是您很可能会像这样在分页中设置一个值:

    paginate = {
      isPage: false,
      default:10,
      max:2000
    }

    然后在您的查询中,您可以使用 if 语句来检查 isPage 值是真还是假。并且仅当您将该值设置为 true 时才限制您的响应。 像这样的:

    const countries = paginate.isPage
      ? await Country.query()
        .limit(paginate.default)
      : await Country.query()

    如果您需要更多帮助,请回复我,我会尽我所能!

    【讨论】:

    • 感谢您的及时回复,我想以不正确的方式向您解释问题,让我们向您解释。 01 我想使用分页的国家列表需要使用默认值 02 在用户创建中我想在那里显示下拉列表框我想显示所有国家。现在在这种情况下,我只有一个 get() 可以覆盖如何将参数发送到限制或没有限制结果?
    • 我认为我的回答涵盖了这种情况,通过向您的分页对象添加一个附加字段,您可以检查您是否尝试分页。您也可以在您的 url 中包含一个参数,该参数可以将值设置为 true 或 false,这样您就可以使用相同的 get 路由,但根据 isPage 是 true 还是 false,有两个不同的查询。再一次,如果我能看到查询的代码,那将会更有帮助。
    【解决方案2】:

    在我添加到 /src/app.hooks.js 的情况下,我发现解决方案需要在获取钩子之前添加应用程序或服务

    module.exports = {
      before: {
        find: [
          (hook) => {
            if (hook.params.query && hook.params.query.$paginate) {
              hook.params.paginate =
                hook.params.query.$paginate === "false" ||
                hook.params.query.$paginate === false;
              delete hook.params.query.$paginate;
            }
            return hook;
          },
        ],
     }
    }
    

    如何从 Postman 调用它:

    GET http://localhost:3031/institutes?$paginate=false // all rows
    GET http://localhost:3031/institutes //Using pagination
    

    Nuxt.js

    async mounted() {
        this.countries = await this.$api.countries.find({ $paginate: false });
    },
    

    vue.js

    this.countries = await this.$axios.get('http://localhost:3031/countries?$paginate=false');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2013-11-16
      • 1970-01-01
      相关资源
      最近更新 更多