GraphQL数量过多的请求正在发送到服务器

时间:2018-08-13 19:12:18

标签: javascript node.js graphql

我的graphql设置文件如下所示

app.use((req, res, next) => {
    logger.entry('info', req); //LOG HERE - It's the first ever middleware
    next();
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static('public'));

app.use('/graphql',
    authMiddleware,
    apolloUploadExpress({
        uploadDir: path.resolve(__dirname, 'public', 'img'),
    }),
    graphqlExpress(req => ({
        schema: executableSchema,
        context: {
            ...req.user,
            connection: {
                remoteAddress: req.connection.remoteAddress,
            },
            headers: {
                ...req.headers,
            },
            postLoader: new DataLoader(keys => batches.batchPosts(keys, req)),
            commentLoader:new DataLoader(keys => batches.batchComments(keys, req)),
            commentCommentLoader: new DataLoader(keys => batches.batchComments(keys, req, true)),
            imageLoader:new DataLoader(keys => batches.batchPostImages(keys, req)),
            hashTagLoader:new DataLoader(keys => batches.batchPostHashTags(keys, req)),
            postLikableLoader:new DataLoader(keys => batches.batchPostLikables(keys, req)),
            postDislikableLoader:new DataLoader(keys => batches.batchPostLikables(keys, req, false)),
            postFactcheckLoader:new DataLoader(keys => batches.batchFactcheckables(keys, req)),
            postFollowingLoader: new DataLoader(keys => batches.batchPostFollowing(keys, req)),
            commentLikeableLoader:new DataLoader(keys => batches.batchCommentLikable(keys, req)),
            commentDislikeableLoader:new DataLoader(keys => batches.batchCommentLikable(keys, req, false))
        },
        formatError,
    })));

我已经正确配置了数据加载器并且可以正常工作。但是,该请求仍然花费太长时间,无法加载仅14个简单文本的帖子,因此我尝试记录请求的条目,结果显示以下内容

2018-08-13T19:07:07.091Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.102Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.108Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.111Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.111Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.111Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.113Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.114Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.115Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.115Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.115Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.118Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.121Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.121Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.121Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.124Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.127Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.127Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.127Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.127Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.130Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.130Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.131Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.131Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.133Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.133Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.134Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined
2018-08-13T19:07:07.134Z [ info ] #ENTRY# IP:127.0.0.1 Route:undefined AuthToken:undefined RefreshToken:undefined

对于我尝试实现的单个请求,我收到了30多个请求。我认为这是架构嵌套问题;但是,即使我删除了所有我的除ID之外的所有字段请求,因此绝对只需要一个请求,但我仍然有28个请求到达服务器。看来这根本不正常,我认为如果我减少这些不必要的请求,我的服务器的速度将大大提高。有人可以帮我还是指导我正确的方向?

下面是一个仅导致一个字段请求而导致20多个请求的示例。

import gql from 'graphql-tag';

export default gql`
    query paginatePosts($count:Int, $after:String){
      paginatePosts(count:$count, after:$after){
          id
      }
    }
`

0 个答案:

没有答案