В контроллере вы создаете запись в базе данных, это должно быть довольно просто. Предположим, у вас есть две модели, User
, которая поставляется со встроенной аутентификацией Sails, и Thing
, то, что кто-то может владеть.
В модели Thing
я бы изменил ownerId
на owner
и связал бы его с моделью User
следующим образом:
attributes: {
id: { ... },
createdAt: { ... },
updatedAt: { ... },
owner: {
model: 'User',
required: yes // Enable this when all the stuff in the db has this set
},
}
Это создает связь или отношение один ко многим, если вы знаете терминологию базы данных.
Теперь в контроллере, где вы создаете свой объект для вставки:
Thing.create({
someAttribute: inputs.someValue,
someOtherAttribute: inputs.someOtherValue,
owner: this.req.me.id
});
Если вы хотите использовать созданный объект сразу, добавьте .fetch()
к цепочке после .create({...})
, например, так:
var thing = await Thing.create({ ... }).fetch();
Дайте мне знать, если что-то неясно.
Я бы порекомендовал вам вложить 9 долларов в покупку курса SailsJS. Это официальный курс, который преподаёт создатель SailsJS Майк Макнил. Вы перейдете от npm i sails -g
к производству на облачной платформе Heroku. Он учит основам Vue (аромат парасейла), использованию MailGun, Stripe платежей и многому другому. Они ссылаются на курс на сайте здесь
Обновление
Проделал дальнейшие раскопки и был вдохновлен парой подобных случаев.
Что вы можете сделать, так это расширить свою модель с помощью пользовательского метода, заключающего в себе метод .create()
. Этот метод может получить объект запроса от ваших контроллеров, но выполнение этого, а не предыдущего предложения, вероятно, будет более трудоемким, чем просто добавление ownerId: this.req.me.id,
к существующим вызовам. Я все равно продемонстрирую.
// Your model
module.exports = {
attributes: { ... },
proxyCreate(req, callback) {
if(!req.body.ownerId){
req.body.ownerId = req.me.id // or req.user.id, cant remember
// which works here
}
Thing.create(request.body, callback);
}
}
А в вашем контроллере:
...
// Change from:
Thing.create(req.body);
// To:
Thing.proxyCreate(req);
...
Обновление № 2
Еще одна идея, которая у меня возникла, - добавить промежуточное ПО для каждого маршрута. Я не знаю сложности ваших маршрутов, но вы можете создать собственное промежуточное ПО только для этих маршрутов.
В router.js
вы редактируете свои маршруты (для краткости я покажу один):
....
'POST /api/v1/things/upload-thing': [
{ action: 'helpers/add-userid-to-ownerid' },
{ action: 'new-thing' }
],
....
В helpers/add-userid-to-ownerid
:
module.exports: {
fn: function(req, res) {
if(!req.body.ownerId){
req.body.ownerId = req.me.id;
}
}
}