-
Notifications
You must be signed in to change notification settings - Fork 2
/
cmd.js
118 lines (101 loc) · 2.61 KB
/
cmd.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/* 2001-05-25 (mca) : add-task.js */
/* Designing Hypermedia APIs by Mike Amundsen (2011) */
var http = require('http');
// set teh vars
var client, host, port, path, args, help;
host = 'localhost';
port = 3000;
path = '/collection/tasks/';
hdrs = {};
args = {};
help = '*** Usage:\n' +
'node add-task.js "<description>" "<dueDate>" [<completed>]\n' +
' Where:\n' +
' <description> is text of task (in quotes)\n' +
' <dueDate> is YYYY-MM-DD (in quotes)\n' +
' <completed> is true|false';
// check args and fire off processing
if(process.argv.length<4 || process.argv.length>5) {
console.log(help);
}
else {
args.description = process.argv[2];
args.dateDue = process.argv[3];
args.completed = (process.argv[4]||false);
client = http.createClient(port,host);
getTemplate();
}
// get the server's write template
function getTemplate() {
// request the template
var req = client.request('GET', path, {'host':host+':'+port});
// event handlers
req.on('response', function(response) {
var body = '';
response.on('data', function(chunk) {
body += chunk;
});
response.on('error', function(error) {
console.log(error);
});
response.on('end', function() {
var data = JSON.parse(body);
buildTask(data.collection.template);
});
});
req.on('error', function(error) {
console.log(error);
});
req.end();
}
// write the task data to the server
function buildTask(template) {
var coll, i, x, msg;
// populate the template
coll = template.data;
for(i=0,x=coll.length;i<x;i++) {
switch(coll[i].name) {
case 'description':
coll[i].value = args.description;
break;
case 'dateDue':
coll[i].value = args.dateDue;
break;
case 'completed':
coll[i].value = args.completed;
break;
}
}
msg = '{"template" : '+JSON.stringify(template)+"}";
sendData(msg);
}
// send the data to the server for storage
function sendData(msg) {
// set up request
var hdrs = {
'host' : host+':'+port,
'content-type' : 'application/collection+json',
'content-length' : (msg.length)
};
// pass data to the server
var req = client.request('POST', path, hdrs);
req.write(msg);
// event handlers
req.on('response', function(response) {
var body = '';
response.on('data', function(chunk) {
body += chunk;
});
response.on('error', function(error) {
console.log(error);
});
response.on('end', function() {
console.log('*** task added!');
});
});
req.on('error', function(error) {
console.log(error);
});
req.end();
}
// eof