Я экспериментировал с настройкой приложения 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 без использования маршрутизатора?