节点:TypeError:无法读取属性' on'未定义的

时间:2016-02-24 03:21:39

标签: javascript json node.js

我尝试使用Node JS解析JSON文件,但该文件似乎没有被正确读取。我一直收到这个错误:

request.on("error", function(error){
       ^

TypeError: Cannot read property 'on' of undefined
    at Object.<anonymous> (/Users/jaeeunlee/Downloads/takehome_test-master/prediction.js:31:8)
    at Module._compile (module.js:410:26)
    at Object.Module._extensions..js (module.js:417:10)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Function.Module.runMain (module.js:442:10)
    at startup (node.js:136:18)
    at node.js:966:3

My Node JS文件:

var fs = require("fs");

var request = fs.readFile("blog_data.json", 'utf8', function(response){
   var body = "";
   console.log(response.statusCode);
   response.on("data", function(chunk) {
        body += chunk;
   });
   response.on("end", function(){
        // var profile = JSON.parse(body);
        // console.dir(profile);
   })
});


request.on("error", function(error){
    console.error(error.message);
})

2 个答案:

答案 0 :(得分:3)

readFile的回调有两个参数:错误和数据。它一次读取所有数据。您试图像http.request那样使用它,但它的工作方式非常不同。

const fs = require("fs");

fs.readFile("blog_data.json", 'utf8', (err, data) => {
   if (err) return console.error(err.message);
   console.dir(JSON.parse(data));
});

这不是HTTP请求。没有statusCode等等。您只是在阅读文件。

此外,node.js可以使用require将JSON导入为对象:

console.dir(require("./blog_data.json"));

答案 1 :(得分:0)

您可能需要fs.createReadStream而不是readFile。请参阅https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options

否则,请参阅https://nodejs.org/api/fs.html#fs_fs_readfile_file_options_callback。像这样使用它:

fs.readFile('blog_data.json', function(err, data) {
  ...
});