Я уже некоторое время пользуюсь Express, но внезапно я не уверен в чем-то довольно простом c -
Я пытаюсь добавить пользовательское промежуточное ПО в приложение Keystone JS - в частности, я добавляю конечную точку токена JWT в настраиваемое поле TinyMCE
Настраиваемое поле:
export let Wysiwyg = {
type: 'Wysiwyg',
implementation: Text.implementation,
views: {
Controller: Text.views.Controller,
Field: importView('./views/Field'),
Filter: Text.views.Filter,
},
adapters: Text.adapters,
prepareMiddleware,
};
, а prepareMiddleware
-
function prepareMiddleware() {
const tinymcePath = dirname(require.resolve('tinymce'));
const app = express();
app.use(cors());
app.use('/tinymce-assets', express.static(tinymcePath));
app.post('/jwt', function (req, res) {
// NOTE: Before you proceed with the TOKEN, verify your users' session or access.
const payload = {
sub: '123', // Unique user id string
name: 'John Doe', // Full name of user
// Optional custom user root path
// 'https://claims.tiny.cloud/drive/root': '/johndoe',
exp: Math.floor(Date.now() / 1000) + (60 * 60) // 60 minutes expiration
};
try {
const token = jwt.sign(payload, privateKey, { algorithm: 'RS256'});
res.set('content-type', 'application/json');
res.status(200);
res.send(JSON.stringify({
token: token
}));
} catch (e) {
res.status(500);
res.send(e.message);
}
});
return app;
}
This Все это вызывается из приложения Keystone JS, на котором работает собственный сервер ExpressJS. Что именно делает звонок в express()
выше? Документы API ExpressJS скажем
**express()**
Creates an Express application. The express() function is a top-level function exported by the express module.
var express = require('express')
var app = express()
Я всегда понимал, что это создание нового HTTP-сервера. Конечно, вы не хотите делать это дважды в одном приложении, если только вы не обслуживаете разные порты (что я не пытаюсь сделать)?
Аналогично, Keystone JS документы скажем
Если вам необходимо предоставить собственное промежуточное программное обеспечение для вашей системы, вы можете создать собственное приложение и включить его в свои экспортируемые приложения.
class CustomApp {
prepareMiddleware({ keystone, dev, distDir }) {
const middleware = express();
// ...
return middleware;
}
}
Здесь опять звонят express()
.
Что именно происходит, когда вы звоните express()
? Согласно документам, он запускает новое приложение Express, но я всегда думал, что это эквивалентно запуску нового сервера. Конечно, я думал, что вы не можете запустить два сервера на одном и том же порту.
Спасибо за помощь в прояснении моего замешательства - я явно не вижу леса за деревьями.