遇到"cannot read property 'length' of undefined"
Encountering "cannot read property 'length' of undefined"
我的 nodejs 服务器出现了一些我以前没有遇到过的奇怪错误。我收到错误:
"TypeError: Cannot read property 'length' of undefined"
我正在使用 formidable 来处理来自我的 html 页面的任何表单数据。尝试了很多方法来修复它,并在网上寻找有类似问题但没有任何结果的人。这是我的代码:
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);
我相信这就是您遇到此问题的地方:
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();
}
});
}
由于您将 err 传递给 readFile 的回调函数,因此您应该检查 err 是否未定义,这可能是您的 readFile 调用出现了一些错误。
简单的回答是 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();
});
}
我的 nodejs 服务器出现了一些我以前没有遇到过的奇怪错误。我收到错误: "TypeError: Cannot read property 'length' of undefined" 我正在使用 formidable 来处理来自我的 html 页面的任何表单数据。尝试了很多方法来修复它,并在网上寻找有类似问题但没有任何结果的人。这是我的代码:
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);
我相信这就是您遇到此问题的地方:
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();
}
});
}
由于您将 err 传递给 readFile 的回调函数,因此您应该检查 err 是否未定义,这可能是您的 readFile 调用出现了一些错误。
简单的回答是 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();
});
}