簡體   English   中英

當有人訪問頁面時開始監聽端口嗎? Node.js Express

[英]Start listening to a port when someone visits a page? Node.js, Express

我被困在node.js,express和一個難以理解的地方之間,試圖弄清楚當有人查看網頁時如何在端口上偵聽。 只要我可以在終端中鍵入node index.js來監聽端口3000,我的代碼就可以正常工作。

在尋找答案的3天里,我沒有方向。 我的頭旋轉的速度不足為奇。

簡而言之,當有人查看網頁時,如何開始在端口上偵聽?

我正在嘗試做的事[盡可能安全]:

  • 從submit.html的提交表單中獲取信息
  • 通過express和Body-Parser推送表單字段
  • 將其存儲在遠程服務器上的MySQL表中。

我的代碼可以根據需要進行工作(減去一些訪問問題)。 它在提交表單時提取信息,對其進行解析,在池中建立一個MySQL連接(我認為),並將數據存儲在另一台服務器的DB中。 如前所述,這僅在我首先在終端中鍵入node index.js時有效。

對我來說,除非您在終端中輸入node index.js,否則我什么都聽不見! 當訪問者訪問您的頁面時(我的情況是提交表單),人們如何開始在端口上偵聽?

我有一些想法,需要一些指導。 我覺得我缺少鏈接的一個鏈接,這阻礙了我的整個項目。

我認為我需要以下之一:

  • tcplistener
  • 使用套接字..如Socket.io
  • http(s).createServer
  • nginx端口配置監聽

我在正確的軌道上嗎? 我需要這些嗎? 我已經嘗試了這些以及很多其他方法,但是每次嘗試實現某人的代碼時代碼中斷時,我都不知道需要什么。

以下是出於笑目的我的代碼。

這是由index.js獲取的表單:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">

<title>Title</title>

<style type="text/css">

</style>

<meta name="robots" content="dofollow" />
<meta name="googlebot" content="dofollow" />

<meta name="description" content=" " />

<meta name="google" content="nositelinkssearchbox" />

</meta>
</body>

<body>

<form id="data-form"  action="http://x.x.x.x:3000/form" method="POST">

<input type="text" name="uid" value="13">

URL:<br>
<input type="text" name="urll" value="Add"><br>

Title:<br>
<input type="text" name="title" value="Title"><br>

Description:<br>
<input type="text" name="blurb" value="Summary"><br>

Tags:<br>
<input type="text" name="tags" value="Three"><br>

<br>
Choose a thumbnail<br>
<br>

<br>
<input type="submit" value="Submit" />

</form>
</body>
</html>

這是我的index.js文件:

var express = require('express');
var bodyParser = require('body-parser');
var app = express();

var jsonParser = bodyParser.json();
var urlencodedParser = bodyParser.urlencoded({ extended: true });
var mysql = require('mysql');

// Configure MySQL connection
var pool = mysql.createPool({
        connectionLimit: 50,
        host: 'x.x.x.x',
        user: 'xx',
        password: 'xxxx',
        database: 'rawdata'
  });

//Establish MySQL connection
pool.getConnection(function(err, connection) {
   if (err)
      throw err;
   else {
       console.log('Connected to MySQL');
       // Start the app when connection is ready
       app.listen(3000);
       console.log('Server listening on port 3000');
 }
});

app.use(bodyParser.urlencoded({ extended: true }));

app.use(bodyParser.json({ type: 'application/*+json' }));

//allow express to access our file
app.get('/form/form.html', function(req, res) {
        res.sendFile(__dirname + "/form/" + "form.html");
    });

//This sends the user information to the path
app.post('/form', urlencodedParser, function(req, res, connection){

    var jsondata = req.body;
    var values = [];

      values.push([jsondata.uid,jsondata.title,jsondata.tags]);

    //Bulk insert using nested array [ [a,b],[c,d] ] will be flattened to (a,b),(c,d)
    pool.query('INSERT INTO raw (uid, title, tags) VALUES ?', [values], function(err,result) {

      if(err) {
         console.log('Error' + err + req.body);
      }
     else {
         res.status(200).send('Done');
      }

    });
    });

您可以使用serve-sent-events(sse) ,這是一種簡單的流技術。使用sse-nodejs庫可以實現此目的。您可以在訪問頁面時添加添加偵聽器。 server.js

var SSE = require('sse-nodejs');

var express = require('express');

var app = express();

app.get('/', function (req,res) {
   res.sendFile(__dirname+ '/index.html');
});

app.get('/time', function (req,res) {
    var app = SSE(res);

    app.sendEvent('time', function () {
        return new Date
    },1000);

    app.disconnect(function () {
        console.log("disconnected");
    });

    app.removeEvent('time',3100);

});

app.listen(3000, function () {
    console.log('Simple SSE server start at port: 3000')
});

index.html

<!DOCTYPE html>
<html>
<head></head>
<body>
HELLO WORLD
<div id="clock"></div>
</body>
<script>
    var ev = new EventSource('/time');
    ev.addEventListener('time', function (result) {
        document.getElementById("clock").innerHTML += '<h4>' + result.data + '</h4>'
    })
</script> 
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM