I'm having problem with the call of some function, I'm learning JavaScript and NodeJS with the knowledge I get from JavaScript, I don't see the clue why I have this error, the function I'm trying to do is this one:
function isFileView(dat)
{
var file = dat;
//Check if im gettint the right data.
console.log('file is ' + dat);
var extension = file.lastIndexOf('.') + 1;
if(extension != 0)
{
switch (extension)
{
case 'html':
return file;
break;
case 'css':
return file;
break;
case 'js':
return file;
break;
}
}
else
{
file = file + '.html';
return file;
}
}
The dat value returns as undefined and is making my server to stop. I've changed the parameter of the function and the variables inside the function but no clue. This is the whole script I've made so far:
//Load modules
var http = require('http');
var fs = require('fs');
var url = require('url');
//Send message to console.
console.log('starting.');
//Load config JSON file and
var content = fs.readFileSync("config.json");
var config = JSON.parse(content);
var server_ip = config.server_ip;
var port = config.port;
console.log('Started.');
//Create server.
server = http.createServer(function(request, response)
{
//if url has GET method.
if(request.url.lastIndexOf('?') != -1)
{
//resolve url only view.
var view = getUrlView(request.url);
console.log('requested: ' + view);
console.log(methodGet(request.url));
//Get requested page
fs.readFile('./views' + view + '.html', function(error, data)
{
//if error returned, send error message
if(error)
{
response.writeHead(400, {'Content-type': 'text/plain'});
response.end('Page was not found');
}
//if error was not returned, send the html
else
{
response.writeHead(200, {'Content-type': 'text/html'});
response.end(data);
}
});
if(view == '/')
{
response.writeHead(200, {'Content-type': 'text/plain'});
response.end('Hello world from node.js');
}
}
else
{
console.log('requested: ' + request.url);
isFileView(view);
//Get requested page
fs.readFile('./views' + request.url + '.html', function(error, data)
{
//if error returned, send error message
if(error)
{
response.writeHead(400, {'Content-type': 'text/plain'});
response.end('Page was not found');
}
//if error was not returned, send the html
else
{
response.writeHead(200, {'Content-type': 'text/html'});
response.end(data);
}
});
if(request.url == '/')
{
response.writeHead(200, {'Content-type': 'text/plain'});
response.end('Hello world from node.js');
}
}
});
server.listen(port);
function getUrlView(dat)
{
//resolve data.
var url = dat.lastIndexOf('?');
url = dat.slice(0, url);
return url;
}
function methodGet(dat)
{
//resolve get method (requires url module).
var url_parts = url.parse(dat, true);
return url_parts.query;
}
function isFileView(dat)
{
var file = dat;
//Check if im gettint the right data.
console.log('file is ' + dat);
var extension = file.lastIndexOf('.') + 1;
if(extension != 0)
{
switch (extension)
{
case 'html':
return file;
break;
case 'css':
return file;
break;
case 'js':
return file;
break;
}
}
else
{
file = file + '.html';
return file;
}
}
I'm beginner at JavaScript so with NodeJS, but I'm an experienced programmer in PHP so I don't know if the switch works in that way.
datis a function parameter, you need to follow the path backward to see where it is being called, and why it is being called withundefinedinstead of the value you expect.extensionseems to be an integer, but in the switch you are looking for a string..?! add adefault:case and see if it enters thereisFileView(view);.dat's value will be determined byviewandviewisn't being given a value within theelseblock.