No estoy bien informado en nodejs o express, tengo una API ejecutándose en http://localhost:3000 y uno de los puntos finales llama a una función que usa el sistema de archivos para leer el archivo de forma sincrónica. Cuando realizo una solicitud de publicación en cartero, dice en la consola que no puede leer una ruta que no existe (lo cual, según tengo entendido).
Código relevante:
índice.js
app.post('/write',(req,res)=> { var body = req.body; console.log('endpoint reached'); console.log(body); logic.append(body.key,body.path); res.send('Writting to state was successful'); });stateLogic.js (esto ocurre en la primera inicialización de trieRoot)
async append(key,path) { var trieRoot = Buffer.from(programData.volatile.modularVariables.readSync(programData.persistent.paths.srcRoot,programData.volatile.modularVariables.encoding.utf8),'hex'); console.log(trieRoot); var db = programData.persistent.states.singularity; var trie = new merkle_patricia_tree_1.SecureTrie(db,trieRoot); var data = programData.volatile.modularVariables.readSync(path,programData.volatile.modularVariables.encoding.utf8); var format = programData.volatile.modularVariables.getFormat(path); var name = programData.volatile.modularVariables.getName(path); var inData = JSON.stringify({name,format,data}); console.log(`key: ${key} value: ${inData}`); await trie.put(Buffer.from(key),Buffer.from(inData)); var root = await trie.root; programData.volatile.modularVariables.write(programData.persistent.paths.srcRoot,root.toString('hex'),programData.volatile.modularVariables.writeCB); var retGet = await trie.get(Buffer.from(key)); console.log('Get returned:'+retGet.toString()); console.log(`From Stack: ${root.toString('hex')} From File: ${this.malleableVar}`); return; };Función readSync utilizada:
readSync: (file,encoding)=>{return fs.readFileSync(file,{encoding:encoding,flag:'r'})},Valor de srcRoot utilizado:
srcRoot: './storage/root.txt'Error de la consola:
(node:18808) UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, open './storage/root.txt'Preguntas:
¿Por qué dice que el camino no existe cuando existe? ¿Y qué es lo que estoy haciendo mal? Gracias por tu tiempo.
Tienes que usar absolute path en lugar de relative path
Modifique su index.js con el siguiente código:
const path = require('path') // <-- import path module to use absolute path. app.post('/write',(req,res)=> { var body = req.body; const absPath = path.join(__dirname, body.path); // <-- absolute path console.log("Absolute Path: ", absPath); logic.append(body.key, absPath); res.send('Writting to state was successful'); }); Nota: Si aún enfrenta el mismo error, verifique el valor body.path .
podemos usar el módulo de ruta para proporcionar una ruta absoluta para el directorio
folder |-server.js |-cert.pemDentro del archivo server.js
const const path = require('path') const certpath = path.join(__dirname,'chain.pem'); // folder\chain.pem