The xmlrpc module is a pure JavaScript XML-RPC server and client for node.js.
Pure JavaScript means that the XML parsing and XML building use pure JavaScript libraries, so no extra C dependencies or build requirements. The xmlrpc module can be used as an XML-RPC server, receiving method calls and responding with method responses, or as an XML-RPC client, making method calls and receiving method responses, or as both.
npm install xmlrpc
The file client_server.js in the example directory has a nicely commented example of using xmlrpc as an XML-RPC server and client (they even talk to each other!).
A brief example:
var xmlrpc = require('xmlrpc')
// Creates an XML-RPC server to listen to XML-RPC method calls
var server = xmlrpc.createServer({ host: 'localhost', port: 9090 })
// Handle methods not found
server.on('NotFound', function(method, params) {
console.log('Method ' + method + ' does not exist');
})
// Handle method calls by listening for events with the method call name
server.on('anAction', function (err, params, callback) {
console.log('Method call params for \'anAction\': ' + params)
// ...perform an action...
// Send a method response with a value
callback(null, 'aResult')
})
console.log('XML-RPC server listening on port 9091')
// Waits briefly to give the XML-RPC server time to start up and start
// listening
setTimeout(function () {
// Creates an XML-RPC client. Passes the host information on where to
// make the XML-RPC calls.
var client = xmlrpc.createClient({ host: 'localhost', port: 9090, path: '/'})
// Sends a method call to the XML-RPC server
client.methodCall('anAction', ['aParam'], function (error, value) {
// Results of the method response
console.log('Method response for \'anAction\': ' + value)
})
}, 1000)
Output from the example:
XML-RPC server listening on port 9090
Method call params for 'anAction': aParam
Method response for 'anAction': aResult
XML-RPC dates are formatted according to ISO 8601. There are a number of formatting options within the boundaries of the standard. The decoder detects those formats and parses them automatically, but for encoding dates to ISO 8601 some options can be specified to match your specific implementation.
The formatting options can be set through
xmlrpc.dateFormatter.setOpts(options);
, where the options
parameter is an object, with the following (optional) boolean members:
colons
- enables/disables formatting the time portion with a colon as separator (default:true
)hyphens
- enables/disables formatting the date portion with a hyphen as separator (default:false
)local
- encode as local time instead of UTC (true
= local,false
= utc, default:true
)ms
- enables/disables output of milliseconds (default:false
)offset
- enables/disables output of UTC offset in case of local time (default:false
)
Default format: 20140101T11:20:00
UTC Example:
xmlrpc.dateFormatter.setOpts({
colons: true
, hyphens: true
, local: false
, ms: true
}) // encoding output: '2014-01-01T16:20:00.000Z'
Local date + offset example:
xmlrpc.dateFormatter.setOpts({
colons: true
, hyphens: true
, local: true
, ms: false
, offset: true
}) // encoding output: '2014-01-01T11:20:00-05:00'