添加到 collection 帆
add to collection in sails
可能我的问题很简单肤浅
但是请指导我
我的地点模型是:
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});
}
});
}
});
},
现在,当我尝试创建新地点并将新城市添加到 collection 时,它给我错误:
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
的新手
请帮帮我
Sails.js 1.0 不再支持 .add()
和 .save()
。
请改用.addToCollection()
。
await Place.addToCollection(new_place.id, 'city').members(req.param('city'));
另一个问题是 sails.js 1.0 不会自动获取 created/updated 对象(在您的情况下为 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 });
},
可能我的问题很简单肤浅 但是请指导我
我的地点模型是:
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});
}
});
}
});
},
现在,当我尝试创建新地点并将新城市添加到 collection 时,它给我错误:
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
请帮帮我
Sails.js 1.0 不再支持 .add()
和 .save()
。
请改用.addToCollection()
。
await Place.addToCollection(new_place.id, 'city').members(req.param('city'));
另一个问题是 sails.js 1.0 不会自动获取 created/updated 对象(在您的情况下为 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 });
},