drupal-client

Javascript Drupal Services Client

Usage no npm install needed!

<script type="module">
  import drupalClient from 'https://cdn.skypack.dev/drupal-client';
</script>

README

drupal-client

A Javascript client for Drupal 7 / Services Module

Build Status

Requirements

  1. An installation of Drupal 7.x and Services Module

  2. REST Server module enabled, an endpoint defined and appropriate permissions (system, user, node, etc.). In server settings, enable only response formatter json the request parsing mime types application/json, application/x-www-form-urlencoded and multipart/form-data.

  3. A Javascript project - node.js or Titanium are known to work.

Installation

node.js

npm install drupal-client

Titanium/Alloy

Copy lib/drupal.js and lib/field.js into your app/lib/ folder.

Usage

Configure the client for your installation of Drupal+Services. Note that the URL includes the trailing slash.

var Drupal = require('drupal');
var drupal = new Drupal();

drupal.setRestPath("http://mywebsite.com/", "rest_endpoint");

Create a Service and enable (at least) the Resources called "system" and "user".

Get a session

drupal.systemConnect(
    //success
    function(sessionData) {
        var uid = sessionData.user.uid;
        console.log('session found for user '+uid);
    },
    //failure
    function(error) {
        console.log('boo :(');
    }
);

Create an account

var user = {
    name: 'my_new_username',
    pass: 'my_new_password',
    mail: 'my_email@drupal.js'
};

drupal.createAccount(user,
    //success
    function(userData) {
        console.log('yay!');
    },
    //failure
    function(error) {
        console.log('boo :(');
    },
    headers //optional
);

Login

var my_username = "<DRUPAL USERNAME>";
var my_password = "<DRUPAL PASSWORD>";

var userObject;

drupal.login(my_username, my_password,
    function(userData) {
        console.log('User ' + userData.uid + ' has logged in.');
        userObject = userData;
    },
    function(err){
        console.log('login failed.');
    }
);

Modify User Info

This updates an account profile on the server. userObject is a user object that may have been received from a login request (see above).

drupal.putResource("user/"+userObject.uid, userObject,
    function(userData) {
        console.log('user has been updated.');
    },
    function(err){
        console.log('user update failed.');
    }
);

Upload A File

var filename = "uploaded_file.png";
var data = require('fs').readFileSync("path/to/file/file.png");
var base64data = data.toString('base64');
var filesize = data.length;

drupal.uploadFile(base64data, filename, filesize,
  function (response) {
    fid = response.fid;
  },
  function (err) {
    console.log(err);
  },
  function (progress_event) {
    console.log(progress_event.loaded + '/' + filesize + ' uploaded');
  }
);

Create a New Node

var node = {
  type: "my_content_type",
  title: "My New Node",
  body: drupal.field.structureField("Check out this great new node!"),
  field_bool: drupal.field.structureField(1),
  field_decimal: drupal.field.structureField(.1),
  field_float: drupal.field.structureField(2.3),
  field_integer: drupal.field.structureField(4),
  field_multiple: drupal.field.structureField(["one", "two", "three"]),
  field_file: drupal.field.structureField(fid, "fid"),
  field_date: field.structureField(new Date())
};

drupal.createNode(node,
  function (resp) {
    console.log(resp);
  },
  function (err) {
    console.log(err);
  }
);

Make Requests

The workhorse function of the interface is makeAuthenticatedRequest(config, success, failure, headers). There are a few helper functions included for posting/getting nodes, getting views, uploading files, etc. They all construct a call to makeAuthenticatedRequest(). This function should facilitate most things that people want to do with Drupal in a mobile environment. It's also easy to use `makeAuthenticatedRequest' to make requests against custom Services. The short-term roadmap includes calls to the services supporting entities.

Tests

To run the tests, rename test/config.js.example to test/config.js and replace strings with the url of your Drupal install and your service endpoint.

npm install npm test