the best way to exclude some data from a method in sails controller

試著忘記壹切 提交于 2019-12-23 02:01:58

问题


I want's to exclude some data in some controller method and in other method i want's that data. I do it with forEach function right into method after finding that :

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);
            }
        });
},

I want to know how possible to do that with finding and do not included ever in finding so we don't need to remove that again with forEach. tanks

As @zabware say we have select method in Query option I try this format but do not work and return all data :

I try to use that with following format but don't working :

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

and

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

and

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

回答1:


Although toJson is really designed to solve the kind of problem you are facing, it will not help you, since in some actions you want to exclude certain fields and in others not.

So we need to select fields per query. Luckily there is a solution for this in waterline:

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

This is supported since sails 0.11 but not really documented. You can find it under query options here https://github.com/balderdashy/waterline-docs/blob/e7b9ecf2510646b7de69663f709175a186da10d5/queries/query-language.md#query-options




回答2:


I accidentally stumbled upon it while playing with the debugger - Sails version 1.2.3

There is something like omit and You can put it into your find method call:

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

It is a pity that there is no word about it in the documentation.



来源:https://stackoverflow.com/questions/39484407/the-best-way-to-exclude-some-data-from-a-method-in-sails-controller

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