YUI uses Mikeal Roger's Request library under the hood to provide our IO transport layer in Node.js.
Out of the box
Our io-base module works out of the box and mimic's it's browser counterpart as much as it can.
Note: You can not use the io module on the server, the io module
contains the io-form and the io-upload-frame modules which both rely on a working DOM
to be available. The io-base module, however, has no requirement on a DOM.
Simple Example
var Y = require('yui/io-base');
Y.io('https://github.com/api/v2/json/user/show/yui', {
on: {
complete: function(id, e) {
var json = JSON.parse(e.responseText);
console.log(json);
}
}
});
That will output this:
{
user: {
gravatar_id: 'af34a0de54b2b7a34cc6d7196ef12fc0',
company: null,
name: 'YUI Library',
created_at: '2008-12-03T17:46:11-08:00',
location: 'Sunnyvale, CA',
public_repo_count: 15,
public_gist_count: 0,
blog: 'http://yuilibrary.com/',
following_count: 0,
id: 38181,
type: 'Organization',
permission: null,
followers_count: 1301,
login: 'yui',
email: null
}
}
Using Request's options
One of the additions our Node.js transport comes with is the ability to add
Request options to the request as we are making
it. This example is how you can PUT data with Y.io.
More configuration information can be found in the request readme over on Github.
var Y = require('yui/io-base'),
rand = Math.floor(Math.random()*100000000).toString();
Y.io('http://mikeal.iriscouch.com/testjs/' + rand, {
method: 'PUT',
request: {
multipart: [
{
'content-type': 'application/json',
body: JSON.stringify({
foo: 'bar',
_attachments: {
'message.txt': {
follows: true,
length: 18,
'content_type': 'text/plain'
}
}
})
},
{
body: 'I am an attachment'
}
]
},
on: {
success: function(id, e) {
Y.log('document saved as: http://mikeal.iriscouch.com/testjs/'+ rand);
var json = JSON.parse(e.responseText);
Y.log(json);
}
}
});
info: document saved as: http://mikeal.iriscouch.com/testjs/9595449
info:
{
ok: true,
id: '9595449',
rev: '1-b40bbeb0ba183941cc666251c556910a'
}
Using Request
Since the request module is bundled with YUI, we expose that inside YUI so you can also use it.
We alias request on the IO object as Y.IO.request, so now you can use it like this:
fs.createReadStream('file.json').pipe(Y.IO.request.put('http://mysite.com/obj.json'));
Y.IO.request.get('http://google.com/img.png').pipe(Y.IO.request.put('http://mysite.com/img.png'));
In future versions of YUI, we will support file uploads via our File API that will use this under the hood as well.