Я следовал этому руководству для загрузки файлов в IPFS с использованием Node.js, но у меня возникла проблема, которая не появилась в учебнике! Это связано с Asyn c и функцией await, я не могу сделать это заявление
const fileHash = fileAdded[0].hash;
Я пытался с await
const fileAdded = await ipfs.add({path: Name, content: file});
но, к сожалению, я получил ошибку, которая is (ha sh undefined).
Я пытался с помощью функции обратного вызова, но я не уверен в своем способе, потому что переменная (fileAdded) не дала мне никакого ответа, а также была неопределена,
это полный код:
const ipfsClient = require('ipfs-http-client');
const express = require('express');
const bodyParser = require('body-parser');
const fileUpload = require('express-fileupload');
const fs= require('fs');
const ipfs = new ipfsClient({host: 'localhost', port: '5001', protocol: 'http'});
const app= express();
var hash = require('hash');
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended:true}));
app.use(fileUpload());
app.get('/',(req,res)=>{
res.render('home');
});
app.post('/upload',(req,res)=>{
const f= req.files.file;
const Name = req.files.file.name;
const filePath ="files/"+ Name;
f.mv(filePath,async(err)=>{
if(err){
console.log("error failed to download a file");
return res.status(500).send(err);
}
const fileh = await addFile(Name,filePath);
fs.unlink(filePath, (err)=>{
if(err) console.log("error");
});
res.render('upload',{Name,fileh});
});
});
const addFile= async(Name,filePath)=> {
const file=fs.readFileSync(filePath);
const fileAdded = await ipfs.add({path: Name, content: file});
const fileHash = fileAdded[0].hash;
return fileHash;
};
app.listen(3000,()=>{
console.log("server is listen");
});
появляется эта ошибка:
Я пишу функцию обратного вызова, например:
const addFile= async(Name,filePath)=> {
const file=fs.readFileSync(filePath);
const fileAdded = await ipfs.add({path: Name, content: file},(err,res)=>{
if(err)
console.log(err);
const fileHash = fileAdded[0].hash;
return fileHash;});};
но значение fileAdded и fileHa sh не было определено.
после того, как я использовал этот код из @Always Learning:
const addFile= async(Name,filePath)=> {
const file=fs.readFileSync(filePath);
const hashes = [];
const filesAdded = ipfs.add({path: Name, content: file});
for await (const result of filesAdded) {
hashes.push(result.hash);
console.log(result.hash);
console.log(result);
}
return hashes; // if you know it's just one for example
};
Это дало мне информация о файле, но ha sh не работает, так как он дал мне неопределенное значение, я хочу извлечь просто ha sh как этот "QmRndAYkvH3D2qhmYfaAZvWT6MDi4NiJPbzJor3EL87rrb"