Интеграция Ltijs в существующее парусное приложение

Я хочу использовать библиотеку Ltijs (https://cvmcosta.me/ltijs) в нашем приложении Sails. Способ развертывания Ltijs как части другого экспресс-сервера таков (из документации Ltijs):

    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)

Способ поместить промежуточное ПО в Sails примерно такой (без 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 -----------------
    
    .
    .
    .

Последнее работает, но работает хорошо, потому что теперь каждый запрос перехватывается Ltijs, и приложение больше не работает. У меня вопрос: как перенести путь '/lti' из app.use('/lti', lti.app) в игру с парусами?

Я пробовал много таких вещей, которые не работали:

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

Заранее спасибо за помощь!


person firebug    schedule 17.09.2020    source источник


Ответы (1)


Кажется, я нашел решение, используя 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 -----
    
    .
    .
    .

Теперь я получаю ожидаемое сообщение об ошибке от Ltijs только тогда, когда я вызываю путь /lti (http://localhost:1337/lti), а остальная часть приложения работает, как и раньше.

Теперь я, надеюсь, смогу продолжить настройку Ltijs и попытаться подключиться с тестового потребителя.

(Я также изменил БД Ltijs, чтобы ее не смешивали с БД моего приложения.)

person firebug    schedule 21.09.2020