2017-10-16 69 views
0

与我以前没有遇到过的nodejs服务器有一些奇怪的错误。我得到的错误: “TypeError:无法读取未定义的属性”长度“ 我使用强大的处理来自我的html页面的任何formdata。尝试了很多事情来修复它,并在网上找到有类似问题但没有任何结果的人。这是我的代码:遇到“无法读取属性”长度未定义“

var http = require('http'); 
var fs = require('fs'); 
var formidable = require("formidable"); 
var util = require('util'); 
var exec = require('child_process').exec; 


var ram; 
var disk; 
var cpu; 
var port = 80; 
var ip = "172.19.0.1"; 

//als de user request doet naar form forward dan naar displayForom, else naar processallfieldsoftheForm om 
//invoer van de gebruiker te verwerken 

var server = http.createServer(function (req, res) { 
    if (req.method.toLowerCase() == 'get') { 
     displayForm(res); 

    } else if (req.method.toLowerCase() == 'post') { 
     processAllFieldsOfTheForm(req, res); 
    } 
}); 

//geef de html form weer 
function displayForm(res) { 
    fs.readFile('form.html', function (err, data) { 
     res.writeHead(200, { 
      'Content-Type': 'text/html', 
     'content-length' : data.length 
     //error is here 
     }); 
    res.write(data); 
     res.end(); 
    }); 
} 


//functie om invoer van de gebruiker te verwerken serverside en als variabele op te slaan. 
function processAllFieldsOfTheForm(req, res) { 
var form = new formidable.IncomingForm(); 
form.parse(req, function (err, fields, files) 
{ 
    ram = (fields.mem) 
    disk = (fields.dsk) 
    cpu = (fields.cpu); 
} 
     ); 
      } 


//exec('cat /home/js/text123', function(err, stdout, stderr){ 
//console.log(stdout); 
//}); 


//serverside logs om te illistreren waar de server naar luistert, en waar hij luistert 
server.listen(port, ip); 
console.log("server lisening on " + port + " adress: " + ip); 
+0

检查'err'的内容 – Andreas

回答

1

简单的答案是fs.readFile('form.html'...的结果是不返回数据。

确保您的form.html文件位于您正在运行此代码的文件夹中,否则,您将不得不指定更多的文件路径。

您还可以利用传入回调的err变量来获得更好的错误检查。尝试添加:

function displayForm(res) { 
    fs.readFile('form.html', function (err, data) { 
     if (err != null) { 
      throw err; 
      // OR 
      console.log(err); 
      // OR 
      // Code to handle errors 
      return; // If you don't throw 
     } 

     res.writeHead(200, { 
      'Content-Type': 'text/html', 
     'content-length' : data.length 
     }); 
    res.write(data); 
     res.end(); 
    }); 
} 
0

我相信这是哪里出现了这样的问题:

function displayForm(res) { 
    fs.readFile('form.html', function (err, data) { 
     res.writeHead(200, { 
      'Content-Type': 'text/html', 
     'content-length' : data.length // here, data is undefined due to some unexpected reason 
     }); 
    res.write(data); 
     res.end(); 
    }); 
} 

这是更好的JS访问任何对象的属性之前做一些验证。尝试使用它作为data.length之前,找出data价值,有点像这样:

function displayForm(res) { 
    fs.readFile('form.html', function (err, data) { 
     if ((data != undefined || data != null) && (data.length > 0)) { 
      res.writeHead(200, { 
       'Content-Type': 'text/html', 
       'content-length' : data.length // now data will always have some value 
      }); 

      res.write(data); 
      res.end(); 
     } 
    }); 
} 
0

既然你逝去的ERR为READFILE回调函数,你应该检查是否犯错是不是不确定的,它可能有readFile调用出现一些错误。

相关问题