Moodle API client for Node.js
A simple and developer friendly JavaScript module to perform Web Service (API) calls to the Moodle site.
Getting started
Install the module
npm install node-moodle
Get site info (using Promised callbacks)
const { MoodleClient } = require('node-moodle');
const moodle = new MoodleClient({
baseUrl: "https://moodle.example.com",
token: "exppsBdQwLvNwYRoAuaiBO5j0fWTzxU6"
});
moodle.core.webservice.getSiteInfo()
.then(res => console.log(res))
.catch(err => console.error(err.message));
Create a new user (using async-await approach)
const { MoodleClient } = require('node-moodle');
const moodle = new MoodleClient({ ... });
async function main() {
try {
var req = {
users: [
{
firstname: "Foo",
lastname: "Bar",
username: "foo",
password: "FooBar123!",
email: "foo@example.com",
}
]
};
var res = await moodle.core.user.createUsers(req);
console.log(res);
}
catch (err) {
console.log(err);
}
}
main();
Event handlers
MoodleClient
extends EventEmitter
const { MoodleClient } = require('node-moodle');
const moodle = new MoodleClient({ ... });
moodle.on("request", function(data) {
console.log(data);
});
moodle.on("resposne", function(data) {
console.log(data);
});
moodle.on("error", function(err) {
console.error(err);
});
Convert JSON to form data
Moodle has a peculiar way of specifying request parameters.
Parameters can either be sent in URL query string or POST form body.
Thus a JSON object needs to be converted to form data
{
"users": [
{
"firstname": "Foo",
"lastname": "Bar",
"username": "foo",
"password": "FooBar123!",
"email": "foo@example.com"
}
]
}
As Content-Type: application/x-www-form-urlencoded
users[0][firstname]=Foo&users[0][lastname]=Bar&users[0][username]=foo&users[0][password]=FooBar123%21&users[0][email]=foo%40email.com
To perform the conversion in the code invoke the flatten
function
const { MoodleClient } = require('node-moodle');
const moodle = new MoodleClient({ ... });
const form = moodle.flatten({
"users": [
{
"firstname": "Foo",
"lastname": "Bar",
"username": "foo",
"password": "FooBar123!",
"email": "foo@example.com"
}
]
});
console.log(form);
List of functions
Offical list of functions can be found at Web service API functions
The following table represents mapping between JavaScript function names and Moodle Web Service function names.
JS function | API function | Description |
---|
auth.email.getSignupSettings(data) | auth_email_get_signup_settings | Get the signup required settings and profile fields. |
auth.email.signupUser(data) | auth_email_signup_user | Adds a new user (pendingto be confirmed) in the site. |
core.user.createUsers(data) | core_user_create_users | Create users - admin function |
core.webservice.getSiteInfo(data) | core_webservice_get_site_info | Return some site info / user info / list web service functions |
Read more... | | |
Functions are used in the following manner
const { MoodleClient } = require('node-moodle');
const moodle = new MoodleClient({ ... });
moodle.core.webservice.getSiteInfo();
Handling Promise
Promise
can be handled with .then().catch()
function chain
moodle.core.webservice.getSiteInfo()
.then(function(res) {
console.log(res);
})
.catch(function(err) {
console.error(err);
});
or using async-await
syntax for later versions of JavaScript
async function sample() {
try {
var res = await moodle.core.webservice.getSiteInfo();
console.log(res);
}
catch (err) {
console.error(err);
}
}
sample();
Note that the data
argument is not always required and can be omitted.
Updating function list
Run the extract script to scrape function names from the official website
npm run extract
The script downloads the HTML from Web service API functions and parses rows from the Core web service functions table.
To update the table in the wiki/functions.md
file run
npm run table
Unit test
Run unit test
npm run test
The test will be performed on a built-in mockup server.