有人访问页面时开始收听端口? Node.js,Express

时间:2018-02-19 09:45:39

标签: javascript node.js express nginx body-parser

我陷入了node.js,express和一个困难的地方,试图找出当有人查看网页时如何监听端口。我的代码工作正常,只要我可以在终端输入节点index.js来侦听端口3000 ....

在寻找答案的3天内,我没有方向。我的头旋转的速度并不奇怪。

简而言之,当有人查看网页时,如何开始收听端口?

我正在努力[尽可能安全]:

  • 从submit.html
  • 的提交表单中获取信息
  • 通过express和Body-Parser推送表单字段
  • 将其存储在远程服务器上的MySQL表中。

我的代码正常运行(减去一些访问问题)。它在提交表单时提取信息,解析它,在池中获取MySQL连接(我认为)并将数据存储在另一台服务器上的数据库中。如上所述,这仅在我首先在终端中键入节点index.js时才有效。

对于我的生活,除非你将节点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');
      }

    });
    });

1 个答案:

答案 0 :(得分:0)

你可以使用 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>