我正在关注源插件教程,在我尝试链接节点之前,一切都很好。
我的数据结构如下:
type Genre implements Node {
id: ID!
itemsCount: Int
imageUrl: String!
name: String!
items: [Movie]
}
type Movie implements Node {
id: ID!
advisory: [String]!
cast: [String]!
title: String!
}
在获取数据后,我可以轻松完成
const genres = fetch(api/genres); // genres have genres.items which is an array of movies
genres.forEach(genre => createNode({ ...genre, id: createNodeId(genre.id) }));
genres.items.forEach((movie => createNode({ ...movie, id: createNodeId(movie.id) }));
所有数据均已正确添加,我可以查询allGenres和allMovies ...,但是当我尝试查询类型项目时,它返回null;
答案 0 :(得分:1)
items
仅包含ID数组,而不包含Movies
[天真-受阿波罗当地人的启发]
id
的对象中。genre
items
转换为Movies
的数组(创建movie
个节点(如果不存在))genre
节点 ...但是[我很天真吗?]首先创建Movie
节点并注释item: [Movie] @link(from: "Movie___NODE")
就足够了。
您必须深入研究API或某些源插件的内部,或者仅搜索gatsby问题作为示例。
最后它应该看起来像:
...genres.map(genre => {
const content = {
itemsCount: genre.itemsCount,
imageUrl: genre.imageUrl,
name: genre.name,
["items___NODE"]: genre.items.map(id =>
createNodeId(`Movie{${id}}`),
),
};
const id = createNodeId(`Genre{${genre.id}}`);
const nodeContent = JSON.stringify(content);
createNode({
...content,
id,
parent: null,
children: [],
internal: {
type: `Genre`,
content: nodeContent,
contentDigest: crypto
.createHash("md5")
.update(nodeContent)
.digest("hex"),
},
});
});
它受到this use case(自类型引用)的启发。
答案 1 :(得分:0)
所以事实证明我可以做的是:
String b64 = Convert.Tobase64String(originalCert.RawData);
然后类似:
Byte[] rawData = Convert.FromBase64String(b64);