【问题标题】:the best way to exclude some data from a method in sails controller从 Sails 控制器中的方法中排除某些数据的最佳方法
【发布时间】:2016-09-14 07:08:04
【问题描述】:

我想在某些控制器方法中排除一些数据,而在其他方法中我想要的是那些数据。我发现 forEach 函数后直接进入方法:

nine: function (req, res) {
    Dore.find()
        .limit(9)
        .sort('createdAt DESC')
        .populate('file')
        .exec(function (err, sh) {
            if (err) {
                return res.negotiate(err);
            } else {
                console.log('before : ', sh);
                sh.forEach(function (item, i) {
                    delete item.zaman;
                });
                console.log('after : ', sh);
                return res.send(sh);
            }
        });
},

我想知道如何通过查找来做到这一点,并且永远不会包含在查找中,因此我们不需要再次使用 forEach 删除它。 坦克

正如@zabware 所说,我们在Query option 中有select 方法,我尝试了这种格式,但不起作用并返回所有数据:

我尝试使用以下格式但不起作用:

Model.find( {
            where: {},
            limit: 9,
            sort: 'createdAt DESC'
        },
        {
            select: [ 'id', 'createdAt' ]
        } )

Model.find( {
            where: {},
            limit: 9,
            sort: 'createdAt DESC',
                        select: [ 'id', 'createdAt' ]
        } )

Model.find( {}, select: [ 'id', 'createdAt' ] )

【问题讨论】:

    标签: sails.js waterline


    【解决方案1】:

    虽然toJson 确实是为解决您所面临的问题而设计的,但它对您无济于事,因为在某些操作中您想排除某些字段而在其他操作中则不想。

    所以我们需要为每个查询选择字段。幸运的是,在水线中有一个解决方案:

    Dore.find({}, {select: ['foo', 'bar']})
        .limit(9)
        .sort('createdAt DESC')
        .populate('file')
        .exec(function (err, sh) {
            console.log(err);
            console.log(sh);
        });
    

    自sails 0.11 起支持此功能,但并未真正记录在案。您可以在此处的查询选项下找到它https://github.com/balderdashy/waterline-docs/blob/e7b9ecf2510646b7de69663f709175a186da10d5/queries/query-language.md#query-options

    【讨论】:

    • toJson 将其从控制器中其他方法的所有方法中删除我想要该数据
    • @SydAmir 好的,那么选择查询选项可能更适合您。查看我的更新。
    • 我尝试了几种方法但没有成功,当使用选择查询选项时,我不知道查询两次(登录控制台两次)。
    • 我的sails版本是0.12.3,在节点4.2.6中,npm版本是3.10.6,在ubuntu 16.04中
    • 出错时查询一次(在2窗口中打开项目-自动刷新)
    【解决方案2】:

    我在玩调试器时偶然发现了它 - Sails 版本1.2.3

    有类似 omit 的东西,你可以把它放到你的 find 方法调用中:

    const user = await User.findOne({
       where: {email : inputs.email},
       omit: ['password']
    }); //There won't be password field in the user object
    

    很遗憾,文档中没有关于它的消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      相关资源
      最近更新 更多