nodejs加载文件

Dan*_*Fox 51 javascript node.js

我想用nodejs加载test.txt.

var fs = require('fs');
fs.readFile('./test.txt', function (err, data) {
  if (err) {
    throw err; 
  }
  console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

服务器的路径是C:\server\test\server.js.test.txt位于同一目录中,但是我收到此错误:Error: ENOENT, no such file or directory 'C:\Users\User\test.txt'

Rob*_*b W 68

Node中的路径相对于当前工作目录进行解析.在路径前加上__dirname解析Node脚本位置的路径.

var fs = require('fs');
fs.readFile( __dirname + '/test.txt', function (err, data) {
  if (err) {
    throw err; 
  }
  console.log(data.toString());
});
Run Code Online (Sandbox Code Playgroud)

  • @myfirsttime1 `__dirname` 仅适用于 Node 脚本,不适用于 REPL。 (2认同)

Mic*_*ole 10

使用Node 0.12,现在可以同步执行此操作:

  var fs = require('fs');
  var path = require('path');

  // Buffer mydata
  var BUFFER = bufferFile('../test.txt');

  function bufferFile(relPath) {
    return fs.readFileSync(path.join(__dirname, relPath)); // zzzz....
  }
Run Code Online (Sandbox Code Playgroud)

fs是文件系统. readFileSync()如果你问的话会返回一个Buffer或string.

fs正确假设相对路径是一个安全问题. path是一种解决方法.

要作为字符串加载,请指定编码:

return fs.readFileSync(path,{ encoding: 'utf8' });
Run Code Online (Sandbox Code Playgroud)


pim*_*vdb 6

您应该使用__dirname获取文件所在的目录名而不是当前工作目录:

fs.readFile(__dirname + "/test.txt", ...);
Run Code Online (Sandbox Code Playgroud)