Прикрепить свойство в объекте context (request in express.js) - PullRequest
0 голосов
/ 10 октября 2019

Я новичок в GraphQL и сейчас пытаюсь создать сервер API с express-graphql.

. Я хочу добавить новое свойство в context объект для распознавателей, что можно сделать, когда я инициализирую экземпляр сервера express-graphql.

Согласно официальному документу, по умолчанию говорится, что если в коде ничего не указано, объект context вкаждая функция распознавателя будет иметь объект, который ранее назывался req в Express.js .

app.use(
  '/graphql',
  graphqlHTTP({
    schema: schema,
    graphiql: true
  })
)
// by this,
// in resolver there will be `context` available
// which includes the data previously available in `req` object (express.js case)

Тогда, что мне делать, если я хочудобавить свое собственное свойство в объект req или context, со всеми членами req в целом? Я просто хочу добавить одно или два новых значения, но не потерять другие значения, которые req уже имеет.

app.use(
  '/graphql',
  graphqlHTTP({
    schema: schema,
    graphiql: true,
    context: {
      customData: 'Yay!'
    }
  })
)
// I was able to add my own data in `context`,
// but eventually I lost all of data which was previously in the `req` object! ?

Любая хорошая идея или знания будут очень цениться.

Ответы [ 2 ]

2 голосов
/ 10 октября 2019

Вы можете использовать это так

app.use('/graphql', expressGraphql(req => ({
  schema,
  graphiql: false,
  context: {
    ...req,
    customData: 'Yay!'
  }
})))

См. Документ https://github.com/graphql/express-graphql#providing-extensions

1 голос
/ 10 октября 2019

Вы можете написать промежуточное программное обеспечение для добавления, использовать его перед настройкой graphqlHTTP.

const setMyContext = (myContext = {}) => {
    return function (req, res, next) {
        req.myContext = myContext;
        next()
    }
};

app.use(setMyContext({
    customData: 'Yay!'
}));

app.use(
  '/graphql',
  graphqlHTTP({
    schema: schema,
    graphiql: true
  })
)

U может получить доступ к customData с помощью

req.myContext.customData

...