2017-10-16 3 views
0

私が以前に遭遇していなかった私のnodejsサーバでいくつかの奇妙なエラーがあります。 "TypeError:プロパティ '長さ'が未定義です" 私はHTMLページからフォームデータを処理するためにformidableを使用しています。それを修正するために多くのことを試してみましたが、同様の問題を抱えていても何の結果も得ていない人にオンラインで見ました。遭遇 "未定義のプロパティ '長さ'を読み取ることができません

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で任意のオブジェクトのプロパティにアクセスする前に、いくつかの検証を行うことが良いでしょう:私はあなたがこの問題を持っているところ、これがあると信じて

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

「エラー」の内容を確認してください。 – 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

:これは私のコードです。多少のように、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

あなたはreadFileのためのあなたのコールバック関数にERRを渡しているので、errが未定義でない場合は、あなたがチェックする必要があり、その可能性がありましたreadFile呼び出しで何らかのエラーが発生しました。

関連する問題