如何在自定义实例方法中使用findOne查询方法

时间:2014-06-19 22:08:25

标签: node.js sails.js waterline

我正在尝试执行以下操作:

// Task Model

module.exports = {
 schema: true,             
 attributes: {

    directProy: {
        type: 'string',
        required: true
    },
    user: {
        type: 'string',
        required: true
    },
    checkUser: {
        type: 'boolean',
        defaultsTo: false
    },
    proy: {
        type: 'string',
        required: true
    },
    pieza: {
        type: 'string',
        required: true
    },
    hours: {
        type: 'string',
        required: true
    },
    obs: {
        type: 'text',
        defaultsTo: "lorem ipsum"
    },
    check: {
        type: 'boolean',
        defaultsTo: false
    },
    userName: function() {
        User.findOne(this.user).done(function(err, user){
            if(err){ return err;}
            return user.name;
        });
    }
}

};

在方法“userName”中,我试图获取具有存储在“user”属性中的ID的用户的名称。

但是当我运行“用户名”方法时,让我回到“未定义”,我认为这必须是异步类型的问题

非常感谢他们给我的帮助,因为我不知道如何在模型之间关联值,这是非常有用的

2 个答案:

答案 0 :(得分:1)

尝试传递回调。

userName: function(cb) {
    User.findOne(this.user).done(function(err, user){
       cb(err, user.name);
    });
}

然后,当您调用它时,请确保传递回调。

model.userName(function(err, username) {
   console.log(username);
});

答案 1 :(得分:0)

您应该使用.exec代替.done,因为它不会在sails@0.10中提供 http://beta.sailsjs.org/#/documentation/reference/Models