0

我想在我们的 Sails 应用程序中使用 Ltijs 库 ( https://cvmcosta.me/ltijs )。将 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();
  };
})(),

提前感谢您的帮助!

4

1 回答 1

0

似乎我找到了使用 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 -----
    
    .
    .
    .

现在,只有当我调用 /lti 路径 (http://localhost:1337/lti) 并且应用程序的其余部分像以前一样运行时,我才会从 Ltijs 收到错误消息。

现在我希望可以继续设置 Ltijs 并尝试从测试消费者进行连接。

(我还更改了 Ltijs 数据库,使其不会与我的应用程序数据库混淆。)

于 2020-09-21T08:37:22.557 回答