【问题标题】:Getting user agent access in the resolver in graphql在 graphql 的解析器中获取用户代理访问权限
【发布时间】:2018-12-06 21:41:45
【问题描述】:

我是 graphQL 的相对论新手,但这让我很烦。我想从客户端发送的请求正文中获取用户代理。我可以访问中间件中的用户代理,但是当我使用任何参数调用下一个函数以发送到解析器时,我没有从中获取任何数据。如果我没有将任何参数传递给 next(),那么解析器将按预期工作,但是 parent、args、User 和 Session 不包含有关请求标头的任何信息。任何帮助或一般提示将不胜感激!谢谢!

app.js

import express from 'express';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
import { graphiqlExpress, graphqlExpress } from 'apollo-server-express';
import { makeExecutableSchema } from 'graphql-tools';

import typeDefs from './Graphql/typeDefs';
import resolvers from './Graphql/resolver';

import { User } from './Mongoose/Schemas/user';
import { Session } from './Mongoose/Schemas/session';

mongoose.connect('mongodb://localhost/test');

const schema = makeExecutableSchema({
  typeDefs,
  resolvers,
});

const helperMiddleware = [
  bodyParser.json(),
  bodyParser.text({ type: 'application/graphql' }),
  (req, res, next) => {
    if ( req.body ) {
      console.log(req.headers['user-agent']);
    }
    next();
  },
];

const PORT = 3009;

const app = express();

app.use('/graphql', ...helperMiddleware, graphqlExpress({ schema, context: { User, Session } }));

app.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql' }));

app.listen(PORT);

console.log(`Running On Port ${PORT}`);

resolver.js

  Mutation: {
    createUser: async (parent, args, { User, Session }) => {

      const user = await new User(args).save();
      user._id = user._id.toString();

      const session = await new Session({
        user_id: user._id,
        userAgent: 'Nothing ATM',
        ip: 'Nothing ATM',
      }).save();

      return user;
    },

【问题讨论】:

    标签: javascript node.js graphql graphql-js apollo-server


    【解决方案1】:

    需要使用回调版本创建GraphQL服务器中间件,否则无法根据当前请求构造上下文:

    https://www.apollographql.com/docs/apollo-server/setup.html#options-function

    【讨论】:

      猜你喜欢
      • 2019-09-18
      • 2011-10-25
      • 2021-12-30
      • 2016-12-08
      • 2020-04-25
      • 1970-01-01
      • 2020-03-06
      • 2018-05-14
      • 2019-11-05
      相关资源
      最近更新 更多