2
Hello, due to some problems to load the bootstrap Twitter libraries in my project, I made several changes to it, in which with help from other users, I arrived at the following Node.js code:
Node.js
var http = require("http").createServer(servidor);
var io = require("socket.io").listen(http);
var fs = require("fs");
var querystring = require('querystring');
var contentTypes = {
js: 'text/javascript',
css: 'text/css',
json: 'application/json',
png: 'image/png',
jpg: 'image/png',
wav: 'audio/wav'
};
var recebido;
function processPost(request, response, callback) {
// Código boilerplate pra receber a querystring pedido HTTP,
// convertê-la e formatá-la em uma coleção de pares chave-valor
var queryData = "";
if(typeof callback !== 'function') return null;
request.on('data', function(data) {
queryData += data;
});
request.on('end', function() {
request.post = querystring.parse(queryData);
callback();
});
}
function servidor(req, res) {
var contentType = 'text/html';
var filePath = '.' + req.url;
if(req.method == 'POST') {
// Se o método do pedido for HTTP POST, processa a querystring
processPost(req, res, function() {
// Imprime a querystring convertida em chaves-valores
console.log(req.post);
// O request.post está disponível para ser usado aqui
// Retorna a página para o cliente com o cód. HTTP 200 (OK)
res.writeHead(200, "OK", {'Content-Type': 'text/plain'});
res.end();
});
}
else if (filePath == './' || filePath == './index.html') filePath = './index.html';
else contentType = contentTypes[req.url.split('.').pop()];
fs.readFile(filePath, function(error, content) {
if (error) {
if (error.code == 'ENOENT') {
fs.readFile('./404.html', function(error, content) {
res.writeHead(200, {
'Content-Type': 'text/html'
});
res.end(content, 'utf-8');
});
} else {
res.writeHead(500);
res.end('Ooops... houve um erro: ' + error.code + ' ..\n');
res.end();
}
} else {
res.writeHead(200, {
'Content-Type': contentType
});
res.end(content, 'utf-8');
}
});
}
http.get('/teste', function(req, res) {
res.charset = 'UTF-8'
res.send(recebido);
});
http.listen(5000, "192.168.0.108", function() {
var host = http.address().address;
var port = http.address().port;
console.log('Exemplo na URL http://%s:%s', host, port);
});
However, when I put the IP in my Browser http://192.168. 0.108/test, does not return any information. Below my HTML code:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>SmartHouse</title>
<!-- Bootstrap Core CSS -->
<link href="/css/bootstrap.min.css" rel="stylesheet">
<!-- Custom CSS -->
<link href="/css/sb-admin.css" rel="stylesheet">
<!-- Morris Charts CSS -->
<link href="/css/plugins/morris.css" rel="stylesheet">
<!-- Custom Fonts
<link href="font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> -->
<script src="/font-awesome/font.js"></script>
<script src="/js/socket.io-1.4.5.js"></script> <!-- chamamos o socket.io que por padrão o socket.io cria a rota http sem precisarmos interferir -->
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div id="wrapper">
<!-- Navigation -->
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.html">Sistema Smart House - Automação Residencial</a>
</div>
<!-- Top Menu Items -->
<!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav side-nav">
<li>
<a href="/index.html"><i class="fa fa-home"></i> Home</a>
</li>
<li>
<a href="sala.html"><i class="fa fa-television"></i> Sala</a>
</li>
<li>
<a href="cozinha.html"><i class="fa fa-birthday-cake"></i> Cozinha</a>
</li>
<li class="active">
<a href="javascript:;" data-toggle="collapse" data-target="#demo"><i class="fa fa-bed"></i> Quartos <i class="fa fa-fw fa-caret-down"></i></a>
<ul id="demo" class="collapse">
<li class="active">
<a href="quarto1.html"> Quarto 1</a>
</li>
<li>
<a href="quarto2.html"> Quarto 2</a>
</li>
</ul>
</li>
<li>
<a href="#"><i class="fa fa-bell"></i> Alarme</a>
</li>
</ul>
</div>
<!-- /.navbar-collapse -->
</nav>
<div id="page-wrapper">
<div class="container-fluid">
<!-- Page Heading -->
<div class="row">
<div class="col-lg-12">
<h1 class="page-header">
Quarto 1 <small>Geral</small>
</h1>
<ol class="breadcrumb">
<li class="active">
<i class="fa fa-bed"></i> Quarto 1
</li>
</ol>
</div>
</div>
<!-- /.row -->
<div class="row">
<div class="col-lg-4">
</div>
<div class="col-lg-4">
<div class="panel panel-default">
<div class="panel-heading">
<h1><center>Quarto 1 - Lampada</center></h1>
</div>
<div class="panel-body">
<a onclick="enviarComandoON()" class="btn btn-success btn-lg btn-block" id="QTD1LED, ON">ON</a>
<a onclick="enviarComandoOFF()" class="btn btn-danger btn-lg btn-block" id="QTD1LED, OFF">OFF</a>
</div>
</div>
</div>
<div class="col-lg-4">
</div>
</div>
<!-- /.row -->
</div>
<!-- /.container-fluid -->
</div>
<!-- /#page-wrapper -->
</div>
<!-- /#wrapper -->
<!-- jQuery -->
<script src="/js/jquery.js"></script>
<!-- Bootstrap Core JavaScript -->
<script src="/js/bootstrap.min.js"></script>
<!-- Morris Charts JavaScript -->
<script src="/js/plugins/morris/raphael.min.js"></script>
<script src="/js/plugins/morris/morris.min.js"></script>
<script src="/js/plugins/morris/morris-data.js"></script>
<script type="text/javascript">
var socket = io.connect();
//função que é disparada quando é pressionado o botão
function enviarComandoON(){
var status = document.getElementById("QTD1LED, ON").id;
var msg = '{' + status + '}';
socket.emit('mensagem', msg); //enviamos o valor do input
}
function enviarComandoOFF(){
var status = document.getElementById("QTD1LED, OFF").id;
var msg = '{' + status + '}';
socket.emit('mensagem', msg); //enviamos o valor do input
}
</script>
</body>
</html>
How can I change my code, using the libraries informed above, to work the GET command, in which you will receive information from the variable "received", a string, such as: {QTD1LED, ON}
Possible duplicate of Buttons with HTTP Request Action
– rodorgas
actually this is test with Socket i.o @rodorgas
– Luiz Henrique
Your other question tbm is with socket.io http://answall.com/questions/152121/html-bootstrap-node-js Have a reason for using socket.io?
– rodorgas
@rodorgas no, but I need to click a button and send information to Node
– Luiz Henrique
As I mentioned earlier, you are using the module
socket.io
unnecessarily... Now it’s gotten even worse, because you’ve included the frameworkexpress
unnecessarily.... Theexpress
is stealing the treatment from the eventrequest
, therefore its functionservidor
is not being called... My suggestion is: first removesocket.io
andexpress
. Then test and see what happens. There will probably be more mistakes, but the way it is won’t work anyway.– zentrunix
@joséx. I edited the new Node.js code in the body of the question. But it has an error in http.get. I’m not getting a solution for this case. Could you help me? Thank you!
– Luiz Henrique