readFileSync返回未定义

时间:2018-10-15 02:53:21

标签: node.js

我有一个2MB的html文件,节点无法读取。

我尝试过的事情:

const fs = require('fs');
const file_name = process.argv[2];

let blob = fs.readFileSync(file_name, 'utf8')
console.log(blob)

这会在终端上显示“未定义”

我也尝试过非同步版本:

const fs = require('fs');
const file_name = process.argv[2];

fs.readFile(file_name, 'utf8', function (err, data) {
    if (err) {
        console.log(err)
        return false    
    }
    console.log(data)
});

这也会打印“未定义”

当我尝试其他html文件时,它没有任何问题。

我该怎么办?是否有任何特定的字符串模式导致节点无法读取文件?

2 个答案:

答案 0 :(得分:1)

尝试使用文件的完整路径

例如

// Dependencies
const fs = require('fs');
const path = require('path');
// Add current path to filename
const file_name = path.join(__dirname, process.argv[2]);

// Check if file exist
fs.exists(file_name, function (file) {
  if (file) {
    // Read file with file_name
    fs.readFile(file_name, 'utf8', function (err, data) {
      if (err) {
        console.log(err);
        return false;
      }
      console.log(data);
    });
  }
  else{
      console.log("file not found");
      return false;
  }
});

答案 1 :(得分:0)

您可以在fs.readFile块内使用fs.readFileSync('./db/user.json');来代替try ... catch

const fetchAllUser = () => {

    // if file doesn't exists we have to write try catch
    try {
        // path should be relative to app.js / index.js (entry file)
        let userString = fs.readFileSync('./db/user.json');
        return JSON.parse(userString);
    } catch (e) {
        console.log(`No database available`);
        return [];
    }
};