Error: ENOENT: no such file or directory, open When trying to access a directory with fs
Error: ENOENT: no such file or directory, open When trying to access a directory with fs
我不了解 nodejs 或 express,我在 http://localhost:3000 上有一个 API 运行 并且端点之一调用使用文件系统读取文件的函数同步地。当我对 postman 发出 post 请求时,它在控制台中说它无法读取不存在的路径(据我所知)。
相关代码:
index.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(这发生在第一次初始化 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;
};
使用的 readSync 函数:
readSync: (file,encoding)=>{return fs.readFileSync(file,{encoding:encoding,flag:'r'})},
使用的 srcRoot 值:
srcRoot: './storage/root.txt'
控制台错误:
(node:18808) UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, open './storage/root.txt'
路径:
问题:
为什么路径存在却说不存在?我做错了什么?谢谢你的时间。
您必须使用 absolute path
而不是 relative path
使用以下代码修改您的index.js
:
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');
});
注意: 如果您仍然遇到同样的错误,请检查 body.path
值。
我们可以使用路径模块为目录提供绝对路径
folder
|-server.js
|-cert.pem
在 server.js 文件中
const const path = require('path')
const certpath = path.join(__dirname,'chain.pem'); // folder\chain.pem
我不了解 nodejs 或 express,我在 http://localhost:3000 上有一个 API 运行 并且端点之一调用使用文件系统读取文件的函数同步地。当我对 postman 发出 post 请求时,它在控制台中说它无法读取不存在的路径(据我所知)。
相关代码:
index.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(这发生在第一次初始化 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;
};
使用的 readSync 函数:
readSync: (file,encoding)=>{return fs.readFileSync(file,{encoding:encoding,flag:'r'})},
使用的 srcRoot 值:
srcRoot: './storage/root.txt'
控制台错误:
(node:18808) UnhandledPromiseRejectionWarning: Error: ENOENT: no such file or directory, open './storage/root.txt'
路径:
问题:
为什么路径存在却说不存在?我做错了什么?谢谢你的时间。
您必须使用 absolute path
而不是 relative path
使用以下代码修改您的index.js
:
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');
});
注意: 如果您仍然遇到同样的错误,请检查 body.path
值。
我们可以使用路径模块为目录提供绝对路径
folder
|-server.js
|-cert.pem
在 server.js 文件中
const const path = require('path')
const certpath = path.join(__dirname,'chain.pem'); // folder\chain.pem