Можно ли использовать промежуточное ПО уровня приложения в маршрутизаторе express? - PullRequest
0 голосов
/ 16 июня 2020

Я экспериментировал с настройкой приложения basi c atlassian-connect- express (ACE) и модифицировал стартовый код, предоставленный пакетом ACE, чтобы он подходил для бессерверного развертывания. Одна из проблем, с которыми я столкнулся после этого, заключалась в том, что маршрутизация теперь разделена на этапы, например, /dev, /prod. Я провел небольшое исследование и обнаружил, что способ справиться с этим - использовать маршрутизатор express и подключить его к соответствующей конечной точке для этапа развертывания. Проблема, с которой я столкнулся, заключается в том, что промежуточное ПО для аутентификации, предоставляемое ACE, похоже, является уровнем приложения и не может использоваться каждым маршрутизатором.

Обычно маршруты добавлялись в приложение express следующим образом:

import ace from 'atlassian-connect-express';
import express from 'express';
import routes from './routes';
const app = express();
const addon = ace(app);

app.use(addon.middleware());
routes(app, addon);

и в ./routes/index.js

export default function routes(app, addon) {
    // Redirect root path to /atlassian-connect.json,
    // which will be served by atlassian-connect-express.
    app.get('/', (req, res) => {
        res.redirect('/atlassian-connect.json');
    });

    // This is an example route used by "generalPages" module (see atlassian-connect.json).
    // Verify that the incoming request is authenticated with Atlassian Connect.
    app.get('/hello-world', addon.authenticate(), (req, res) => {
        // Rendering a template is easy; the render method takes two params:
        // name of template and a json object to pass the context in.
        res.render('hello-world', {
            title: 'Atlassian Connect'
        });
    });

    // Add additional route handlers here...
}

Я изменил ./routes/index.js, чтобы он работал как объект маршрутизатора и экспортирую его, однако это не позволяет мне использовать addon.authenticate() промежуточное ПО

import ace from 'atlassian-connect-express';
import express from 'express';
import routes from './routes';
const app = express();
const addon = ace(app);

app.use('/dev', require('./routes'));

и в ./routes/index.js

const express = require('express');
const router = express.Router();

// Redirect root path to /atlassian-connect.json,
// which will be served by atlassian-connect-express.
router.get('/', (req, res) => {
    res.redirect('/atlassian-connect.json');
});

// This is an example route used by "generalPages" module (see atlassian-connect.json).
// Verify that the incoming request is authenticated with Atlassian Connect.
router.get('/hello-world', addon.authenticate(), (req, res) => {
    // Rendering a template is easy; the render method takes two params:
    // name of template and a json object to pass the context in.
    res.render('hello-world', {
        title: 'Atlassian Connect'
    });
});

module.exports = router;

Очевидно, не зная о addon, маршрутизатор не может использовать это промежуточное ПО для аутентификации.

Возможно ли передать это промежуточное ПО маршрутизатору при его подключении к приложению? Если нет, есть ли другой способ обработки префиксов URL без использования маршрутизатора?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...