Listen to specific URL instead of port

I am completely new to Nodejs and try to get to know him. Well, I'm currently trying to push notifications in a web browser if any changes occur in the database. I have a piece of code that I used to use for testing. The following code works fine to send updates to browsers when the contents of the database table change:

Server.js

var app = require('http').createServer(handler).listen(8000), io = require('socket.io').listen(app), fs = require('fs'), mysql = require('mysql'), connectionsArray = [], connection = mysql.createConnection({ host: 'localhost', user: 'root', password: '', database: 'nodejs', port: 3306 }), POLLING_INTERVAL = 3000, pollingTimer, pollingTimer_2; // If there is an error connecting to the database connection.connect(function(err) { // connected! (unless `err` is set) console.log(err); }); // on server started we can load our client.html page function handler(req, res) { fs.readFile(__dirname + '/client.html', function(err, data) { if (err) { console.log(err); res.writeHead(500); return res.end('Error loading client.html'); } res.writeHead(200); res.end(data); }); } /* * This function loops on itself since there are sockets connected to the page * sending the result of the database query after a constant interval * */ var pollingLoop = function() { // Doing the database query var query = connection.query('SELECT * FROM users'), users = []; // this array will contain the result of our db query // setting the query listeners query .on('error', function(err) { // Handle error, and 'end' event will be emitted after this as well console.log(err); updateSockets(err); }) .on('result', function(user) { // it fills our array looping on each user row inside the db users.push(user); }) .on('end', function() { // loop on itself only if there are sockets still connected if (connectionsArray.length) { pollingTimer = setTimeout(pollingLoop, POLLING_INTERVAL); updateSockets({ users: users }); } }); }; // creating a new websocket to keep the content updated without any AJAX request io.sockets.on('connection', function(socket) { console.log('Number of connections:' + connectionsArray.length); // starting the loop only if at least there is one user connected if (!connectionsArray.length) { pollingLoop(); } socket.on('disconnect', function() { var socketIndex = connectionsArray.indexOf(socket); console.log('socket = ' + socketIndex + ' disconnected'); if (socketIndex >= 0) { connectionsArray.splice(socketIndex, 1); } }); console.log('A new socket is connected!'); connectionsArray.push(socket); }); var updateSockets = function(data) { // adding the time of the last update data.time = new Date(); // sending new data to all the sockets connected connectionsArray.forEach(function(tmpSocket) { tmpSocket.volatile.emit('notification', data); }); }; 

Client.html

 <html> <head> <title>Push notification server streaming on a MySQL db</title> <style> dd,dt { float:left; margin:0; padding:5px; clear:both; display:block; width:100%; } dt { background:#ddd; } time { color:gray; } </style> </head> <body> <time></time> <div id="container">Loading ...</div> <script src="socket.io/socket.io.js"></script> <script src="http://code.jquery.com/jquery-latest.min.js"></script> <script> // create a new websocket var socket = io.connect('http://localhost:8000'); // on message received we print all the data inside the #container div socket.on('notification', function (data) { var usersList = "<dl>"; $.each(data.users,function(index,user){ usersList += "<dt>" + user.user_name + "</dt>\n" + "<dd>" + user.user_desc + "\n" + "<figure> <img class='img-polaroid' width='50px' src='" + user.user_img + "' /></figure>" "</dd>"; }); usersList += "</dl>"; $('#container').html(usersList); $('time').html('Last Update:' + data.time); }); </script> </body> </html> 

Now that you see that the server is currently listening on port 8000 . I'm just wondering how can I change it to listen to a specific url? Because if I am going to implement a server in a project, then I am not going to use url to listen on ports? Rather, I want to use it as a simple URL, so how can I smoothly send a notification if any user is connected to a specific URL?

Any help?

+5
source share
1 answer

If you want your node server to respond to the URL http://www.example.com/updates , you force your server to listen on port 80 (the default port if no ports are specified and the protocol is "http"). And then you will respond to the server with the "/updates" route.

Servers listen on a specific port at a specific IP address. They do not listen on the path or URL. The browser uses DNS to obtain the IP address for the host in the URL. If there is a port number in the URL, it uses that port. If not, it uses the default port for a particular protocol. Then it makes a TCP connection with this IP address on this port. Then, if the protocol is HTTP, it sends a request for this connection and includes the path.

Thus, the server receives the incoming connection, and then, as part of the HTTP protocol, it receives the verb (GET, POST, DELETE, etc.) and the path, which then performs the server task to decide what is based on the incoming command / path.

+4
source

Source: https://habr.com/ru/post/1205323/


All Articles