oortcloud/node-ddp-client

ddpclient connect and call not working with faye-websocket > 0.7.2

Closed this issue · 6 comments

I have a node server which makes ddp client connections to push data from a Drupal installation to a Meteor app. Been working great until some fellow devs installed newer version of the ddp client.

Node server using ddp-client: http://cgit.drupalcode.org/spectacle/tree/modules/spectacle_core/ddp.js

When I install ddp@0.8.1, the default dependencies are (these do not work for me):
faye-websocket@0.7.3
└── websocket-driver@0.3.6

I am not able to get the ddp server above to work unless I use the dependency versions below:
faye-websocket@0.7.2
└── websocket-driver@0.3.5

The package.json file we are having to use to make things work for now: http://cgit.drupalcode.org/spectacle/tree/modules/spectacle_core/package.json

Any thoughts on what is going on or how to debug further. Glad to help. :) Thanks!

If you specify the faye-websocket and websocket-driver versions manually (as you have done in the package.json), the 0.8.1 version of ddp version should use them without issue.

It sounds more like one of the changes I did in 0.8.0 is unintentionally a breaking change. Would you mind to try changing lines 8-15 of your ddp.js to:

var ddpclient = new DDPClient({
  maintainCollections: false
});

and see if that makes a difference. I did find one bug (fixed here). The above snippet should bypass it.

Yes, we were able to pin faye-websocket and websocket-driver versions manually and we are now running ddp version 0.8.1. That works for us as you expected it to.

We made your code changes in lines 8-15 with all the latest version of the ddp-client and dependencies and it did not work.

Can continue to test if you have ideas. Thanks for the quick response!

With the updated ddp.js, you mind unpinning the faye-websockets and websocket-driver?

Sure. I tested with the following module versions and with the ddp.js updated to what I have below:


ddp@0.8.1 node_modules/ddp
├── ddp-ejson@0.8.1-3
├── ddp-underscore-patched@0.8.1-2
└── faye-websocket@0.7.3 (websocket-driver@0.3.6)

var ddpclient = new DDPClient({
  maintainCollections: false
});

This setup did not work. We are still able to successfully connect and work with ddp using the following versions and your suggested ddpclient setup above:


├─┬ ddp@0.7.0
│ ├── ddp-ejson@0.8.1-3
│ └── ddp-underscore-patched@0.8.1-2
├── faye-websocket@0.7.2
└── websocket-driver@0.3.5

Ok, so we isolated the change to something the websocket driver, though I don't know what else to say without digging deeply into that code.

However, by rearranging your code a bit, I'm able to get it to work:

// Setup server to respond to Drupal post submissions.
var express = require('express');
var bodyParser = require('body-parser');
var DDPClient = require("ddp");

var app = express();

var ddpclient = new DDPClient({
  // host: "localhost",
  // port: 3000,
  // autoReconnect: true,
  // autoReconnectTimer: 500,
  // ssl: false,
  maintainCollections: false
});

app.use(bodyParser.json());

// Setup routes for our nodejs listener.
app.get('/', function(req, res) {
  res.send('Ready for Spectacle connection!');
});


app.post('/', function(req, res, next) {
  console.log(req.headers);
  console.log(req.body);

  ddpclient.call(
    'addPost',
    [req.body]
  );

  res.send({ status: 'SUCCESS' });
});


ddpclient.connect(function(err) {
  if (err) throw new Error('DDP connection error!');
  console.log('connected!');
});


// Nodejs listener setup for port 8080.
app.listen(8080);
console.log('Listening for data on port: 8080');


// Monitor ddp connection for messags (for debugging purposes).
ddpclient.on('message', function (msg) {
  console.log("ddp message: " + msg);
});

Feel free to reopen as needed.