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.iounnecessarily... Now it’s gotten even worse, because you’ve included the frameworkexpressunnecessarily.... Theexpressis stealing the treatment from the eventrequest, therefore its functionservidoris not being called... My suggestion is: first removesocket.ioandexpress. 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