Integration of Ltijs into existing sails app

358 Views Asked by At

I want to use the Ltijs library (https://cvmcosta.me/ltijs) in our Sails application. The way to deploay Ltijs as part of another express server is this (from Ltijs documentation):

    const app = express()
    lti.setup('EXAMPLEKEY', { url: 'mongodb://localhost/database' })
    
    // Start LTI provider in serverless mode
    await lti.deploy({ serverless: true })
    
    // Mount Ltijs express app into preexisting express app with /lti prefix
    app.use('/lti', lti.app)

The way to put middleware into Sails is something like that (without app.use(...)!):

// config/http.js

const lti = require('ltijs').Provider;
lti.setup(
        '8swieleivBef',
        {url: 'mongodb://localhost:27017/mysailsapp'},
);

lti.deploy({serverless: true});

module.exports.http = {

  middleware: {

    order: [
      'cookieParser',
      'session',
      'bodyParser',
      'ltiExpressAdapter', //<-------- my middleware adapter -----------------
      'compress',
      'poweredBy',
      'router',
      'www',
      'favicon',
    ],

    ltiExpressAdapter: lti.app, //<-------- my middleware adapter -----------------
    
    .
    .
    .

The latter works, but it works to "good", because now every request is caught by Ltijs and the application doesn't work anymore. My Question is, how do I bring the path '/lti' from app.use('/lti', lti.app) into the sails game?

I tried lots of things like this that didn't work:

ltiExpressAdapter: (function () {
  return async function (req, res, next) {
    if (req.path.match(/^\/lti.*$/)) {
      return lti.app;
    }
    return next();
  };
})(),

Thanks in advance for help!

1

There are 1 best solutions below

0
On BEST ANSWER

Seems I found a solution using app.use(...):

// config/http.js

const express = require('express');   //<------ NEW -----
const app = express();                //<------ NEW -----

const lti = require('ltijs').Provider;
lti.setup(
        '8swieleivBef',
        {url: 'mongodb://localhost:27017/ltijsdb'},  //<------ (NEW) -----
);

lti.deploy({serverless: true});

module.exports.http = {

  middleware: {

    order: [
      'cookieParser',
      'session',
      'bodyParser',
      'ltiExpressAdapter', //<-------- my middleware adapter -----------------
      'compress',
      'poweredBy',
      'router',
      'www',
      'favicon',
    ],

    ltiExpressAdapter: app.use('/lti', lti.app), //<------ NEW -----
    
    .
    .
    .

Now I get the expexted error message from Ltijs only when I call the /lti path (http://localhost:1337/lti) and the rest of the application runs like before.

Now I hopefully can go on setting up Ltijs and try to connect from a test consumer.

(I also changed the Ltijs DB so that it isn't mixed up with my App's DB.)