当前位置: 首页 > 知识库问答 >
问题:

fs.readfile()返回未定义的[重复]

微生曾琪
2023-03-14
var http = require('http');

var fileContent = function(path, format) {
  var fs = require('fs');
  fs.readFile(path, format, function(error, contents) {
    if (error) throw error;
    return contents;
  });
}

var server = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  page = fileContent('./page.html','utf8');
  console.log(page);
  res.end(page);
}).listen(8080);

我打印了错误,

[Error: ENOENT: no such file or directory, open './page.html'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: './page.html'
}

这两个文件在同一个目录中

共有1个答案

汲利
2023-03-14

首先,fs.readfile异步函数。这意味着不立即返回答案或阻止线程等待答案。相反,它需要一个回调,让您知道何时应答就绪。

其次,我建议使用path模块合并__dirname(当前模块的目录名)和文件名来制作绝对文件路径。

我将提供3个解决方案使用不同的方法。

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

var fileContent = function(path, format, cb) {
  fs.readFile(path, format, function(error, contents) {
    if (error) throw error;
    cb(contents);
  });
}

var server = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  fileContent(path.join(__dirname, 'page.html'), 'utf8', function (page) {
    console.log(page);
    res.end(page);
  });
}).listen(8080);
var http = require('http');
var fs = require('fs');
var path = require('path');

var fileContent = function(path, format) {
  return new Promise(function (resolve, reject) {
    fs.readFile(path, format, function(error, contents) {
      if (error) reject(error);
      else resolve(contents);
    });
  });
}

var server = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  fileContent(path.join(__dirname, 'page.html'), 'utf8')
    .then(function(page) {
      console.log(page);
      res.end(page);
    });
}).listen(8080);
var http = require('http');
var fs = require('fs');
var path = require('path');

var fileContent = function(path, format) {
  return new Promise(function (resolve, reject) {
    fs.readFile(path, format, function(error, contents) {
      if (error) reject(error);
      else resolve(contents);
    });
  });
}

var server = http.createServer(async function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  var page = await fileContent(path.join(__dirname, 'page.html'), 'utf8');
  console.log(page);
  res.end(page);
}).listen(8080);
 类似资料:
  • 我正在尝试为discord bot执行命令,它从MySQL表中输出整数。 我尝试使用async/await、Promissions和回调来实现这一点,但结果总是一样的。在这里,我用promise再次尝试,因为在过去它不知何故起了作用。现在不会了。 下面是返回promise的函数: 下面的代码将结果赋值给Access Level变量: Catch函数捕获表示“TypeError:无法读取未定义的属性

  • 问题内容: 因此,当我打开灯箱时,我试图禁止在页面上滚动,而我发现这个确实有用的脚本非常有用。不幸的是,当我在自己的页面上使用它时,它也禁止在灯箱中滚动。我开始用警报调试代码,只是发现该事件。wheelDelta在我的页面上返回“undefined”,而在JSFiddle中,它返回-120。 问题答案: jQuery事件处理程序中的对象不能反映真实事件。是IE和Opera的非标准事件属性,可通过j

  • 然而,当我只使用console.log(body)时,它会给出正确的结果 …………………………。 ………………………… ……

  • 我是JS的新手,不明白为什么我的程序中的图像没有改变。所有的变量都运行良好。下面是片段 所有的图像都被命名为1.jpg,2.jpg,3.jpg,4.jpg,直到24。这是一种很奇怪的方式,我也知道,如果有人知道更好的方式,那会更好。

  • 这是我的代码: 它读取上传的文件,并将原始文件保存在数据对象(propertiesData)中。问题就出在这一部分: console.log(readFiles);显示像这样的原始文件数组和console.log(i);显示console.log(readfiles[i])的正确索引;应该显示一个原始文件字符串,但它只显示未定义的。为什么?

  • 我有下面的函数,它可以正确地从响应中提取图像的前缀和后缀,并生成一个可变的结果,其中包含场馆图像的url。然而,当我返回结果时,我一直没有定义。这里出了什么问题?