小编Ahm*_*ous的帖子

GraphQL错误 - 参数类型必须是输入类型但得到:undefined

我有

export const getPicture = {
    type: GraphPicture,
    args: {
        type: new GraphQLNonNull(GraphQLInt)
    },
    resolve(_, args) {
        return Picture.findByPrimary(args.id);
    }
};

export const getPictureList = {
    type: new GraphQLList(GraphPicture),
    resolve(_, __, session) {
        return Picture.findAll({where: {owner: session.userId}});
    }
};
Run Code Online (Sandbox Code Playgroud)

const query = new GraphQLObjectType({
    name: 'Queries',
    fields: () => {
        return {
            getPictureList: getPictureList,
            getPicture: getPicture
        }
    }
});

const schema = new GraphQLSchema({
    query: query,
    mutation: mutation
});
Run Code Online (Sandbox Code Playgroud)

哪个投掷:

Error: Queries.getPicture(type:) argument type must be Input Type but …
Run Code Online (Sandbox Code Playgroud)

graphql

13
推荐指数
2
解决办法
1万
查看次数

Elixir混合文件 - :应用程序vs:extra_applications - 何时使用哪个?

来自Elixir文档:

:applications - 应用程序在运行时依赖的所有应用程序.默认情况下,此列表是从依赖项中自动推断出来的.必须在中指定任何额外的Erlang/Elixir依赖项:extra_applications.混合和其他工具使用应用程序列表,以便在启动应用程序本身之前启动依赖项.

:extra_applications - 您希望在应用程序之前启动的Erlang/Elixir应用程序列表.例如,Elixir :logger或Erlang的:crypto.

如果:applications自动推断列表,那么在我们应该添加应用程序:applications而不是:extra_applications?时,有哪些示例场景?反之亦然?

elixir

13
推荐指数
1
解决办法
1717
查看次数

处理Relay.Store作为全球商店(即redux商店)

我正在重构(为了好玩,哈哈)我的redux应用程序来传递.在redux应用程序中,失败的事件将使用失败消息调度操作.

这将由"警报"减速器拾取,然后该减速器将向用户发出警报.这将在被删除之前保持在全局状态x秒.

Alert组件将处于空状态,直到发送警报以填充它.

如何在Relay下完成?有没有办法只改变商店而不是调度GraphQL突变?

谢谢您的帮助 :)

redux relayjs

11
推荐指数
1
解决办法
210
查看次数

在Elixir伞应用程序中,应该将logger后端应用程序添加为依赖项?

我有一个Elixir伞形应用程序.伞下的应用程序使用Logger.我想为应用程序添加后端(logger_logstash_backend):logger.所以,我需要deps在混合文件中添加它作为函数的依赖项.

在伞形应用程序的最外层混合文件中,deps功能状态的文档:

此处列出的依赖项仅适用于此项目,无法从apps文件夹中的应用程序访问

这意味着我必须将后端模块添加为伞下每个应用程序的依赖项.但是,这样做会导致几个问题:

  1. 稍后将单个应用程序移出单独的库变得更加困难.

  2. 保护伞下的各个应用程序实际上并不依赖于自定义:logger后端模块.他们没有默认的:console后端.但我想只为prod环境增加一个后端.因此,更多的是跨应用程序问题,我不得不单独为每个应用程序添加依赖项.

你知道更好的策略吗?它是什么?

erlang elixir phoenix-framework

8
推荐指数
1
解决办法
687
查看次数

Facebook Graph API:在页面提要中选择附件媒体大小

我正在使用 Facebook Graph API v2.8 来获取如下页面提要:

/page-id/posts?fields=attachments{media,title},id,message...
Run Code Online (Sandbox Code Playgroud)

如果帖子有附件,我希望我的请求返回attachments.media.image 路径中每个附件的完整尺寸图像。目前,它仅返回标准尺寸(380x380px 至最大 720x720px)的方形图像。

有没有办法进一步指定查询来实现这一点?就像是:

fields=attachments{media{image.type(full)},title]},id....
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我不想向媒体/对象端点发出另一个请求。

PS:当前响应中的 url 指向 php 服务,其中包含宽度和高度参数,可以省略该参数以获得完整尺寸的图像。

https://external.xx.fbcdn.net/safe_image.php?d=AQAkZcYtE-TiVzTj&w=542&h=542&url=fbstaging%3A%2F%2Fgraph.facebook.com%2Fstaging_resources%2FMDExMDE1NDcxNzI3Njg3Mjc2MDoxMjE3ODEyMjE%3D&cfs=1&sx=104&sy=0&sw=542&sh=542&l
Run Code Online (Sandbox Code Playgroud)

然而,由于该 URL 中也有一个哈希值,我真的不想做正则表达式来删除响应图像 URL 的宽度和高度参数来获取全尺寸图像。

编辑:我也不能真正使用 full_picture 字段,因为它只会给我第一个(主)附件的 URL。我正在查找所有附件的媒体 URL。

附件参考

json facebook facebook-graph-api

5
推荐指数
1
解决办法
981
查看次数

使用Passport Facebook验证Apollo GraphQL API

我有一个客户端服务器和一个API,都使用Apollo。当用户使用Facebook登录时,我想将令牌发送到客户端服务器,然后将其附加到对API进行的每个请求的标头中。不使用会话。

API的外观如下,当用户使用Facebook登录时,此API会成功生成令牌(我也在后台检查数据库中的用户)。

// API running on port 3010
app.use(expressJwt({
    secret: authConfig.jwt.secret,
    credentialsRequired: false,
    getToken: req => req.cookies.id_token,
}));
app.use(passport.initialize());
app.get('/login/facebook',
    passport.authenticate('facebook', { scope: ['email'], session: false }),
);

app.get('/login/facebook/return',
    passport.authenticate('facebook', { failureRedirect: 'http://localhost:3000/login', session: false }),
    (req, res) => {
        const expiresIn = 60 * 60 * 24 * 1; // 1 day
        const token = jwt.sign(req.user, authConfig.jwt.secret, { expiresIn });
        res.redirect(`http://localhost:3000?token=${token}`); // Redirect to client and append token to param
    },
);
Run Code Online (Sandbox Code Playgroud)

我的问题是,现在如何安全地将此令牌交给客户端?我已经读过这个this,这使我不得不在参数中传递令牌,但是我不确定我在做什么是否安全。 …

javascript node.js passport-facebook graphql apollo-server

5
推荐指数
0
解决办法
1016
查看次数

Erlang(Elixir)Dialyzer - 令人困惑的超类型错误

我已经定义了Elixir行为X.回调start_link被指定为:

@callback start_link(
  args :: producer_args,
  opts :: GenServer.options
) :: GenServer.on_start
Run Code Online (Sandbox Code Playgroud)

其中producer_argstype被定义为:

@type producer_args :: %{job_queue_name: String.t}
Run Code Online (Sandbox Code Playgroud)

Y实现该行为的客户端代码中,start_link定义为:

def start_link(args = %{job_queue_name: _job_queue_name, redis_url: _redis_url}, opts) do
  GenStage.start_link(__MODULE__, args, opts)
end
Run Code Online (Sandbox Code Playgroud)

透析器不喜欢它.它说,

(#{'job_queue_name':=_, 'redis_url':=_, _=>_}) 
is not a supertype of 
#{'job_queue_name':=binary()}
Run Code Online (Sandbox Code Playgroud)

问题#1:

在继承方面,子类型扩展了超类型.因此,定义的行为(X)应该被认为是超类型.实现行为(Y)的模块应被视为子类型.显然Dialyzer应该问这个问题:

#{'job_queue_name':=binary()}超类型 (#{'job_queue_name':=_, 'redis_url':=_, _=>_})

相反,它以相反的方式提出问题.为什么?

问题2:

supertype透析器中的定义与OOP继承的讨论相同吗?如果没有,那么它是什么?我试图在透析器的上下文中找到超类型的定义,但没有找到.

erlang elixir erlang-otp

4
推荐指数
1
解决办法
160
查看次数

如何使用 GraphQL 获取所有用户模型

我已经为此苦苦挣扎了一个多小时,但似乎无法让它发挥作用。

我正在将 GraphQL 的 ruby​​ 实现与 Rails 一起使用,并且我正在尝试使用 GraphQL 执行 User.all。我有以下 QueryType 定义字段用户。

QueryType = GraphQL::ObjectType.define do
  name "Query"
  description "The query root for this schema"

  field :users do
    types[IndexUserType]

    resolve -> () {
      User.all
    }
  end
end
Run Code Online (Sandbox Code Playgroud)

和 IndexUserType 定义如下:

IndexUserType = GraphQL::ObjectType.define do
  name "IndexUserType"
  description "An Index User"
  field :firstname, types.String
end
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下查询获取所有用户的名字:

query={ users { firstname } }
Run Code Online (Sandbox Code Playgroud)

通常我可以对 Has-Many 关系进行以下操作,但是这不起作用,我认为这是因为没有父级就无法设置“obj”。

resolve -> (obj, args, ctx) {
  obj.cousins
}
Run Code Online (Sandbox Code Playgroud)

ruby rubygems ruby-on-rails graphql

1
推荐指数
1
解决办法
1194
查看次数