Как передать объект в расширение сервера FatFractal, получить доступ из него и вернуть объект обратно клиентскому приложению?
Я использую FatFractal JavaScript SDK и объявил расширение сервера в моем файле FFDL следующим образом:
CREATE EXTENSION /ChangePassword AS javascript:require('scripts/UserAdministration').changePassword();
Я создаю расширение сервера, чтобы позволить пользователю изменить свой пароль для входа. Из моего клиентского приложения я хочу передать простой объект /ChangePassword
содержит логин пользователя, текущий (старый) пароль и новый желаемый пароль. Предполагая, что я заполнил указанный объект, как бы я затем A) Передал объект клиентское приложение на расширение сервера, B) Получить дескриптор переданного объекта в расширении сервера, и C) Вернуть объект подтверждения (предпочтительно) или сообщение от серверного расширения до клиентского приложения после того, как изменение завершено?
FFDL:
CREATE OBJECTTYPE ChangePasswordRequest (userName STRING, oldPassword STRING, newPassword STRING)
CREATE COLLECTION /ChangePasswordRequest OBJECTTYPE ChangePasswordRequest
Код JS клиентского приложения:
...
function ChangePassInfo() {
this.userName = null;
this.currentPassword = null;
this.newPassword = null;
return this;
}
...
function changePassword() {
var uname = ff.loggedInUser().userName;
var oldPass = $("#input-curr-pass").val();
var newPass = $("#input-new-pass").val();
var requestInfo = new ChangePassInfo();
requestInfo.userName = uname;
requestInfo.currentPassword = oldPass;
requestInfo.newPassword = newPass;
// pass 'requestInfo' to 'ChangePassword' extension
// acquire handle to confirmation object/message returned from 'ChangePassword'
...
}
Код JS расширения сервера:
var ff = require('ffef/FatFractal');
...
function ChangePasswordRequest() {
this.clazz = 'ChangePasswordRequest';
this.createdBy = 'system';
this.userName = null;
this.oldPassword = null;
this.newPassword = null;
return this;
}
...
function changePassword() {
var changePassReq; // instance of a 'ChangePasswordRequest' object
// acquire handle to 'requestInfo' passed from client application to populate 'changePassReq'
...
// return a confirmation message or copy of 'changePassReq' to client application
}
...
exports.changePassword = changePassword;
Закомментированные разделы - это проблемные области, которые я хочу решить. Как только они будут решены, я смогу заполнить остальную часть реализации. Спасибо!
1 ответ
Давайте начнем с бэкэнда. Предполагая, что объект был добавлен в расширение, вот как вы получаете его в своей функции:
var ff = require('ffef/FatFractal'); // FatFractal module
var data = ff.getExtensionRequestData(); // Get request data
var member = data.httpContent.member // Get 'obj' member of passed object
Хорошо, теперь вы сделали кое-что и хотите что-то вернуть, вот как вы это делаете:
var r = ff.response(); // Get response object, and populate
r.result = { member: "Something", otherMember: false, yaMember: 42 };
r.responseCode = "200";
r.statusMessage = "This message is useful";
r.mimeType = "application/json";
Наконец, на стороне клиента. Вот как разместить объект в расширении:
var ff = new FatFractal();
// ...
ff.postObjToExtension({ member: "derp" }, "/yourExtension", ... );
Надеюсь, что все проясняет!