也许我的问题非常简单和肤浅 但是,请指导我
我的地方模型是:
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的新手
请帮帮我
答案 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 });
},