EWD 3
トレーニング・コース #9
複雑なewd-xpressのメッセージと応答
M/Gateway Developments Ltd.
Rob Tweed
訳: 日本ダイナシステム株式会社 嶋 芳成
複雑なメッセージ送る
• これまで、可能な限り最も単純なメッセージのみを送
信してきました
• type プロパティのみを持ち、他のコンテンツやペイロードは加
えていません
• メッセージは、開発者の必要とする限り、大きく複雑な
ものにすることができます
• まさに JavaScript オブジェクトです
2016/9/5 EWD 3 トレーニング・コース #9 2
複雑なメッセージを送信する
• メッセージ・オブジェクトの params プロパティ内にコン
テンツやペイロードを定義します
var messageObj = {
type: ‘login’,
params: {
username: $(‘#username’).val(),
password: $(‘#password’).val()
}
};
EWD.send(messageObj, callbackFn);
2016/9/5 EWD 3 トレーニング・コース #9 3
複雑なメッセージを処理する
• バックエンド・ハンドラーの中では、params は、
messageObj.params としてアクセスできます:
login: function(messageObj,session,send,finished) {
var username = messageObj.params.username;
if (username===‘’) {
finished({error: ‘You must enter a username’);
return;
var password = messageObj.params.password;
if (password === ‘’) {
finished({error: ‘You must enter a password’);
return;
}
// … その他
}
2016/9/5 EWD 3 トレーニング・コース #9 4
複雑なメッセージを送信する
• params は、必要なだけ複雑なオブジェクトにすること
ができます
var messageObj = {
type: ‘complex’,
params: {
foo: ‘bar’,
subObj: {
hello: ‘world’,
name: ‘rob’
}
arr: [‘a’, ‘b’, ‘c’]
}
};
EWD.send(messageObj, callbackFn);
2016/9/5 EWD 3 トレーニング・コース #9 5
複雑なメッセージを送信する
• params は、必要なだけ複雑なオブジェクトにすること
ができます
var messageObj = {
type: ‘complex’,
params: {
foo: ‘bar’,
subObj: {
hello: ‘world’,
name: ‘rob’
}
arr: [‘a’, ‘b’, ‘c’]
}
};
EWD.send(messageObj, callbackFn);
2016/9/5 EWD 3 トレーニング・コース #9 6
バックエンドでは、
var name = messageObj.params.subObj.name;
複雑なメッセージを送信する
• params は、必要なだけ複雑なオブジェクトにすること
ができます
var messageObj = {
type: ‘complex’,
params: {
foo: ‘bar’,
subObj: {
hello: ‘world’,
name: ‘rob’
}
arr: [‘a’, ‘b’, ‘c’]
}
};
EWD.send(messageObj, callbackFn);
2016/9/5 EWD 3 トレーニング・コース #9 7
バックエンドでは、
var b = messageObj.params.arr[1];
複雑な応答メッセージを返す
• バックエンド・ハンドラーの send() または finished()
関数が返す応答メッセージも、必要なだけ複雑にする
ことができます
• 応答メッセージのサイズには十分注意してください
• ewd-qoper8 が遅くなる可能性があります
• 応答メッセージが大きくなると、Express がブラウザやクライ
アントに返すのに要する時間が長くなります
2016/9/5 EWD 3 トレーニング・コース #9 8
複雑な応答メッセージを返す
finished({
foo: ‘bar’,
myObj: {
hello: ‘world’,
name: ‘Rob’
}
myArr: [‘a’,’b’,’c’]
});
2016/9/5 EWD 3 トレーニング・コース #9 9
複雑な応答メッセージを返す
finished({
foo: ‘bar’,
myObj: {
hello: ‘world’,
name: ‘Rob’
}
myArr: [‘a’,’b’,’c’]
});
2016/9/5 EWD 3 トレーニング・コース #9 10
ブラウザ側のレスポンス・ハンドラー内では、
responseObj.message.myObj.name
EWD.send() の callback および Pub/Sub ハンドラ
のいずれにおいても

EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答