Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays NodeJS fs-无法读取外部json文件_Arrays_Node.js_Json_Express_Fs - Fatal编程技术网

Arrays NodeJS fs-无法读取外部json文件

Arrays NodeJS fs-无法读取外部json文件,arrays,node.js,json,express,fs,Arrays,Node.js,Json,Express,Fs,我试图用fs读取外部json文件,然后记录它,但它不起作用。在我的json文件中,我只有一个数组需要读取: { "tags": [ "blah", "blah1", "etc..." ] } 我使用异步readFile函数来读取它 ... const tagsjson = require('../tags.json'); var tags; ... fs.readFile(tagsjson, 'utf8', function(err,data){ if(err) thr

我试图用fs读取外部json文件,然后记录它,但它不起作用。在我的json文件中,我只有一个数组需要读取:

{
"tags": [ "blah", "blah1", "etc..."
        ]
}
我使用异步readFile函数来读取它

...
const tagsjson = require('../tags.json');
var tags;
...

 fs.readFile(tagsjson, 'utf8', function(err,data){
  if(err) throw err;

  tags = data;
})
 console.log(tags)

我不知道是什么问题,我尝试了JSON.parsedata,但它也不起作用,我使用原始数据,因为我想在读取后将该标记发送到客户端。

由于使用异步文件读取,您必须在回调函数中使用您的tags变量。您还必须在readFile函数中传递文件名:

异步:

var tags;
fs.readFile("../tags.json", 'utf8', function (err, data) {
   if (err) throw err;

   tags = data;
   console.log(tags);
});
var tags;
tags = fs.readFileSync("../tags.json", 'utf8');
console.log(tags);
同步:

var tags;
fs.readFile("../tags.json", 'utf8', function (err, data) {
   if (err) throw err;

   tags = data;
   console.log(tags);
});
var tags;
tags = fs.readFileSync("../tags.json", 'utf8');
console.log(tags);

在使用异步文件读取时,必须在回调函数中使用tags变量。您还必须在readFile函数中传递文件名:

异步:

var tags;
fs.readFile("../tags.json", 'utf8', function (err, data) {
   if (err) throw err;

   tags = data;
   console.log(tags);
});
var tags;
tags = fs.readFileSync("../tags.json", 'utf8');
console.log(tags);
同步:

var tags;
fs.readFile("../tags.json", 'utf8', function (err, data) {
   if (err) throw err;

   tags = data;
   console.log(tags);
});
var tags;
tags = fs.readFileSync("../tags.json", 'utf8');
console.log(tags);

您以错误的方式读取文件,这里是错误的

const tagsjson = require('../tags.json');
require将实际返回导出的内容,导出的内容将返回一个对象,readFile函数的第一个参数为字符串

fs.readFile('../tags.json', 'utf8', function(err,data){
  if(err) throw err;
对于处理异步操作,您将处理两个选项

回拨 承诺 为了承诺

const promise = new Promise((resolve, reject) => {
  fs.exists('../tags.json', (exists) => {
     if (exists) {
        fs.readFile('../tags.json', (err, data) => { 
          if(err) {
            console.log(err);
            reject(err);
            } else resolve(data);
         });
       } else {
         reject('File Does Not Exist!');
       }
   });
 });

promise
  .then(data => {
    console.log(data);
  })
  .catch(err => {
    console.log(err);
  });

您以错误的方式读取文件,这里是错误的

const tagsjson = require('../tags.json');
require将实际返回导出的内容,导出的内容将返回一个对象,readFile函数的第一个参数为字符串

fs.readFile('../tags.json', 'utf8', function(err,data){
  if(err) throw err;
对于处理异步操作,您将处理两个选项

回拨 承诺 为了承诺

const promise = new Promise((resolve, reject) => {
  fs.exists('../tags.json', (exists) => {
     if (exists) {
        fs.readFile('../tags.json', (err, data) => { 
          if(err) {
            console.log(err);
            reject(err);
            } else resolve(data);
         });
       } else {
         reject('File Does Not Exist!');
       }
   });
 });

promise
  .then(data => {
    console.log(data);
  })
  .catch(err => {
    console.log(err);
  });

... 但它不起作用什么不起作用?你有错误吗?或者,由于console.logtags不在回调中,您是否因为readFile的异步调用而遇到问题?我正在使用try-catch,它将此记录在浏览器控制台中,无法加载资源:服务器响应状态为500内部服务器错误文件名应为例如字符串,const-tagsjson=require'../tags.json';看起来有点不对劲。像fs.readFile'../tags.json',utf8',err,data=>{…哦,它记录了这一点系统无法打开指定的设备或文件让我试试你告诉我的…但它不工作什么不工作?你有任何错误吗?或者你有问题,因为console.logtags没有使用回调,所以异步调用readFile?我正在使用try-catch,它在浏览器控制台Fai中记录了这一点导致加载资源:服务器响应状态为500内部服务器错误文件名应为字符串,const tagsjson=require'../tags.json';看起来有点错误。如fs.readFile'../tags.json',utf8',err,data=>{….哦,它记录了这个,系统无法打开指定的设备或文件,让我试试你告诉我的,如果我不能在回调函数之外使用标记,我如何才能将它发送到客户端。你可以将其余的代码放在这个回调函数中,你可以使用承诺确保在读取文件后执行其余的代码吗可以使用readFileSync函数来阻止代码的执行,并在代码中使用您想要的var标记。在Node.js中推荐同步方法从来都不是一个好主意。如果在服务器上使用这种方法,如果有异步方法,请不要使用同步方法。我知道,我完全同意您的意见,但它是存在的,而且是第一次,如果他不知道如何使用承诺,它可以是一个解决方案如果我不能在回调函数外使用标记,我将如何将其发送给客户端您可以将其余代码放在这个回调函数内,您可以使用承诺确保在读取文件后执行其余代码,还是可以使用readFileSync函数阻止在Node.js中推荐一种同步方法从来都不是一个好主意。如果在服务器上使用这种方法,如果有一种异步方法,就永远不要使用同步方法。我知道,我完全同意你的看法,但它是存在的,而且在第一次,如果他不知道如何使用承诺,这可能是一个解决方案