Использование ctx в промежуточном программном обеспечении koa

У меня есть промежуточное ПО koa, которое я использую следующим образом:

.use(signS3())

Теперь я хочу использовать объект ctx из koa в объекте конфигурации из signS3(). Я хотел бы сделать что-то вроде этого:

.use((ctx, next) => signS3({ keyPrefix: ctx.host })(ctx, next))

Но это не работает. Я думаю, что у меня неправильный синтаксис, буду признателен за любой вклад в то, как это сделать.


person Jonathan Wieben    schedule 28.09.2017    source источник
comment
Должен работать нормально. Как вы обнаружите, что это не работает, и что внутри функции signS3?   -  person Oles Savluk    schedule 29.09.2017
comment
@OlesSavluk Не знаю точно, как он ломается, но первый работает, а второй нет. signS3 — промежуточное ПО koa github.com/ktonon/koa-s3-sign-upload   -  person Jonathan Wieben    schedule 30.09.2017


Ответы (1)


Вы используете промежуточное ПО, написанное для koa@1, которое использует генераторы вместо async/await. Вы должны были заметить это предупреждение при запуске приложения:

koa deprecated Поддержка генераторов будет удалена в v3. См. документацию для примеров того, как преобразовать старое промежуточное ПО https://github.com/koajs/koa/blob/master/docs/migration.md

Чтобы использовать это промежуточное ПО в koa@2, вам необходимо преобразовать его вручную или с помощью koa-convert. Например:

const convert = require('koa-convert');

app.use(
  (ctx, next) => convert(
    signS3({
      bucket: 'MyBucket',
      keyPrefix: ctx.host,
    })
  )(ctx, next)
);

Также ознакомьтесь с официальной документацией по Использование ПО промежуточного слоя версии 1.x в версии 2.x

person Oles Savluk    schedule 30.09.2017