Node.js, não pode abrir arquivos. Erro: ENOENT, stat './path/to/file'

126

Eu desenvolvi um programa node.js usando a estrutura expressa no meu computador, onde ele funciona bem, sem queixas.

No entanto, quando executo o programa no dispositivo SUSE Studio, onde ele se destina a viver, recebo um erro em qualquer interação do arquivo.

Error: ENOENT, stat './path/to/file'

Eu verifiquei se as permissões do arquivo estão corretas, quais são. Meu computador e meu dispositivo estão executando versões diferentes do nó, se isso importa.

Alguma ideia?


fonte
1
Como o caminho é relativo, talvez você esteja executando-o em um diretório diferente? Como você está gerando o caminho e qual é a estrutura de diretórios? E como você está executando o nó?
Loganfsmyth
1
Obrigado, sim, eu estava executando o script em um diretório diferente e, tolamente, assumi que o caminho do arquivo seria relativo ao próprio script. Eu sabia que era algo simples como este :)
Deve ser corrigível. Você pode adicionar algum código que mostre como você está fazendo o caminho e o que você espera que ele resolva? Se você quer que ele seja relativo a um arquivo específico, normalmente você faria__dirname + 'path/to/file';
loganfsmyth
Sim, foi o que eu fiz agora. Eu estava executando o script executando "node ~ / path / to / script.js" e esperando que as referências relativas aos arquivos do meu script resolvessem "~ / path / to" Obrigado!

Respostas:

187

Os caminhos especificados com a .são relativos ao diretório de trabalho atual, não ao arquivo de script. Portanto, o arquivo pode ser encontrado se você executar, node app.jsmas não se você executar node folder/app.js. A única exceção é require('./file')e isso só é possível porque requireexiste por módulo e, portanto, sabe de que módulo está sendo chamado.

Para criar um caminho relativo ao script, você deve usar a __dirnamevariável

var path = require('path');

path.join(__dirname, 'path/to/file')

ou potencialmente

path.join(__dirname, 'path', 'to', 'file')
loganfsmyth
fonte
11
Obrigado; Às vezes, são pequenas as coisas assim que são difíceis de encontrar na documentação, para iniciantes (como eu!).
5

Aqui o código para usar seu app.js

entrada especifica o nome do arquivo

res.download(__dirname+'/'+input);
AmirtharajCVijay
fonte