У меня проблемы с загрузкой нескольких узлов из разных вызовов API.Каждый отдельный тип узла работает нормально, но gatsby-node.js позволяет устанавливать только один тип, поэтому вся работа CreateNode должна выполняться за один раз.Я не могу понять, не работает ли он из-за нескольких асинхронных вызовов или что-то еще ...
Я пробовал много разных методов, ниже приведен последний эксперимент, но все они потерпели неудачу.
const axios = require('axios');
const crypto = require('crypto');
exports.sourceNodes = async ({ actions }) => {
const { createNode } = actions;
const fetchUsers = () => axios.get('http://192.168.0.71/api/manager/users/user/', {
method: 'GET',
headers: {
'Authorization': 'Bearer XXXX',
},
}).then(res => {
const hUsers = Object.keys(res.data).map((row,i) => {
const userNode = {
id: res.data[row].id,
parent: null,
internal: {
type: 'HomeyUsers',
},
children: [],
email: res.data[row].email,
name: res.data[row].name,
properties: res.data[row].properties,
enabled: res.data[row].enabled,
verified: res.data[row].verified,
picture: res.data[row].avatar,
role: res.data[row].role,
present: res.data[row].present,
asleep: res.data[row].asleep,
inviteUrl: res.data[row].inviteURL,
inviteToken: res.data[row].inviteToken
};
const contentDigest = crypto
.createHash('md5')
.update(JSON.stringify(userNode))
.digest('hex');
userNode.internal.contentDigest = contentDigest;
createNode(userNode);
});
});
const fetchDevices = () => axios.get('http://192.168.0.71/api/manager/devices/device/',{
method: 'GET',
headers: {
'Authorization': 'Bearer XXXX',
},
}).then(res => {
//const res = await fetchDevices();
const hDevices = Object.keys(res.data).map((row,i) => {
const deviceNode = {
id: res.data[row].id,
parent: null,
internal: {
type: 'HomeyDevices',
},
children: [],
name: res.data[row].name,
zone: res.data[row].zone
};
const contentDigest = crypto
.createHash('md5')
.update(JSON.stringify(deviceNode))
.digest('hex');
deviceNode.internal.contentDigest = contentDigest;
createNode(deviceNode);
});
});
const fetchFlows = () => axios.get('http://192.168.0.71/api/manager/flow/flow/',{
method: 'GET',
headers: {
'Authorization': 'Bearer XXXX',
},
}).then(res => {
//const res = await fetchFlows();
const hFlows = Object.keys(res.data).map((row,i) => {
const flowNode = {
id: res.data[row].id,
parent: '__SOURCE__',
internal: {
type: 'HomeyFlows',
},
children: [],
name: res.data[row].name,
folder: res.data[row].folder,
enabled: res.data[row].enabled,
actions: res.data[row].actions,
};
const contentDigest = crypto
.createHash('md5')
.update(JSON.stringify(flowNode))
.digest('hex');
flowNode.internal.contentDigest = contentDigest;
createNode(flowNode);
});
});
return Promise.all([hUsers, hDevices, hFlows]);
}