#javascript #feathersjs
#javascript #feathersjs
Вопрос:
Я новичок в FeathersJS, и я пытаюсь сделать следующее:
В моем приложении есть два объекта с именами Company
и User
. Когда кто-то регистрирует новую компанию, сообщается имя, адрес электронной почты и пароль для владельца.
Затем, после создания записи для компании в моей таблице companies, мне нужно:
1) Для получения id
новой компании;
2) Создайте пользователя с этим id
объявлением companyId
, именем владельца, электронной почтой владельца и указанным паролем.
Конечно, это должно быть сделано в after insert hook
службе для компаний, но я очень смущен тем, как вызвать службу пользователей для выполнения этой вставки.
Это мой companies.model.js файл:
module.exports = function (app) {
const sequelizeClient = app.get('sequelizeClient');
const companies = sequelizeClient.define('companies', {
company: {
type: DataTypes.STRING,
allowNull: false,
size: 100
},
cpfcnpj: {
type: DataTypes.STRING,
allowNull: false,
size: 25
},
owner: {
type: DataTypes.STRING,
allowNull: false,
size: 100
},
cpf: {
type: DataTypes.STRING,
allowNull: false,
size: 25
},
email: {
type: DataTypes.STRING,
allowNull: false,
size: 100
},
addr1: {
type: DataTypes.STRING,
allowNull: false,
size: 100
},
addr2: {
type: DataTypes.STRING,
allowNull: false,
size: 100
},
city: {
type: DataTypes.STRING,
allowNull: false,
size: 100
},
state: {
type: DataTypes.STRING,
allowNull: false,
size: 2
},
zip: {
type: DataTypes.STRING,
allowNull: false,
size: 10
},
phone: {
type: DataTypes.STRING,
allowNull: false,
size: 50
}
}, {
hooks: {
beforeCount(options) {
options.raw = true;
}
}
});
companies.associate = function (models) {
};
return companies;
};
и это мой users.model.js:
module.exports = function (app) {
const sequelizeClient = app.get('sequelizeClient');
const users = sequelizeClient.define('users', {
companyID: {
type: DataTypes.INTEGER,
allowNull false,
size: 11
},
name: {
type: DataTypes.STRING,
allowNull: false,
size: 100
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
size: 100
},
password: {
type: DataTypes.STRING,
allowNull: false
},
type: {
type: DataTypes.STRING,
allowNull: false,
default: 'CL',
size: 2
}
}, {
hooks: {
beforeCount(options) {
options.raw = true;
}
}
});
users.associate = function (models) {
};
return users;
};
Я понимаю, что в моих файловых компаниях.перехваты.js У меня должно быть что-то вроде
module.exports = {
before: {
all: [],
...
},
after: {
...
create: [ insertUser() ],
...
},
error: {
...
}
};
но, кроме этого, я действительно не знаю, как мне написать свою insertUser()
функцию или куда ее поместить. Как я уже говорил вам, я новичок в FeathersJS, это мой первый день.
ОТРЕДАКТИРОВАНО:
На первую часть вопроса дан ответ. Я использовал некоторые console.log()
s здесь и там и обнаружил, что объект context
, переданный перехвату, имеет result
внутри него объект с именем, когда вы находитесь в after
перехвате, что так и есть. Используя этот объект, теперь есть идентификатор компании, имя и адрес электронной почты владельца.
Ответ №1:
Все это внутри context
.
Когда вы используете a hook
в FeatherJS, вы hook function
получаете объект с именем context
, и у этого объекта есть все, что вам нужно.
В an after hook
у нас есть context.result
объект с результатом предыдущего запроса. В запросе на вставку, как и в вопросе, context.result
содержится вся вставленная информация, включая идентификатор вставленной компании.
Кроме того, context
объект содержит ссылку на app
объект FeathersJS, который является запускаемым приложением, со всеми его сервисами, перехватами и всем остальным. Итак, чтобы создать пользователя, как требуется в вопросе, все, что вам нужно сделать, это:
Отредактируйте файл src/services/companies/companies .hooks.js и добавьте, в самом начале, после импорта, функцию, подобную этой
const createUser = function(context) {
const userRecord = {
companyID: context.result.id,
name: context.result.owner,
email: context.result.email,
// Get all other information you need here
};
context.app.service('users').create(userRecord);
};
Зарегистрируйте этот перехват прямо ниже в том же файле
module.exports = {
before: {
all: [authenticate('jwt')],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
},
after: {
all: [],
find: [],
get: [],
create: [ createUser ], // <<=== registering the hook
update: [],
patch: [],
remove: []
},
error: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
}
};
И это сделано! Каждый раз, когда вы создаете новую компанию after hook
, будет выполняться и будет создан новый пользователь, связанный с этой компанией.
Нажмите здесь для получения дополнительной информации о перехватах FeathersJS.