添加到帆中的集合

时间:2018-03-31 08:09:02

标签: node.js sails.js

也许我的问题非常简单和肤浅 但是,请指导我

我的地方模型是:

module.exports = {
attributes: {

title: {
  type: 'string',
},

body: {
  type: 'string',
  columnType: 'text',
},

address: {
  type: 'string',
  columnType: 'text',
},

x_map: {
  type: 'number',
  columnType: 'float'
},

y_map: {
  type: 'number',
  columnType: 'float'
},

like: {
  type: 'number',
  columnType: 'integer'
},

dis_like: {
  type: 'number',
  columnType: 'integer'
},

visited: {
  type: 'number',
  columnType: 'integer'
},

emtiaz: {
  type: 'number',
  columnType: 'integer'
},

tags: {
  type: 'string',
},

city:{
  collection: 'city',
  via: 'place_owner'
},
},
};  

我的城市模型是:

module.exports = {

attributes: {
title: {
  type: 'string',
},



ostan_owner :{
  model: 'ostan'
},

place_owner: {
  model: 'place'
  }
 },
};

我的位置控制器是:

create: function (req, res, next) {
Place.create(req.params.all, function place_created(err,new_place){
  if(err && err.invalidAttributes) {
    err = validator(Place, err);
    return res.json({'status':false, 'errors':err.Errors});
  }
  else{
    new_place.add('city',req.param('city'));
    new_place.save(function (err) {
      if(err){
        return res.json({'status':false,'errors':err});
      }
      else {
        res.json({'status':true,'result':new_place});
      }
    });

  }


});
},

现在,当我尝试创建新地点并添加新城市时,它会给我错误:

TypeError: Cannot read property 'add' of undefined  
at place_created (C:\Programing_workspace\gardeshgar_sailsV1\gardeshgar\api\controllers\PlaceController.js:28:19)  

我使用model_X.addToCollection我发现同样的错误
我使用sails v 1.0,我是sails.js的新手

请帮帮我

1 个答案:

答案 0 :(得分:2)

Sails.js 1.0不再支持.add().save()。 请改用.addToCollection()

await Place.addToCollection(new_place.id, 'city').members(req.param('city'));

另一个问题是sails.js 1.0不会自动获取创建/更新的对象(在您的情况下为new_place)。 您需要添加{ fetch: true }以获取创建的对象。

例如:

User.create({...}, function(err, createdUser) {
//...
}, { fetch: true });

或者使用等待:

var createdUser = await User.create({...}).fetch();

我认为,在您的情况下,解决方案应该是:

create: function (req, res, next) {
  Place.create(req.params.all, function place_created(err,new_place){
    if(err && err.invalidAttributes) {
      err = validator(Place, err);
      return res.json({'status':false, 'errors':err.Errors});
    }
    else{
      await Place.addToCollection(new_place.id, 'city').members(req.param('city')).exec(function (err) {
        if(err){
          return res.json({'status':false,'errors':err});
        }
        else {
          res.json({'status':true,'result':new_place});
        }
      });          
    }   
  }, { fetch: true });
},