[英]Start listening to a port when someone visits a page? Node.js, Express
我被困在node.js,express和一个难以理解的地方之间,试图弄清楚当有人查看网页时如何在端口上侦听。 只要我可以在终端中键入node index.js来监听端口3000,我的代码就可以正常工作。
在寻找答案的3天里,我没有方向。 我的头旋转的速度不足为奇。
简而言之,当有人查看网页时,如何开始在端口上侦听?
我正在尝试做的事[尽可能安全]:
我的代码可以根据需要进行工作(减去一些访问问题)。 它在提交表单时提取信息,对其进行解析,在池中建立一个MySQL连接(我认为),并将数据存储在另一台服务器的DB中。 如前所述,这仅在我首先在终端中键入node index.js时有效。
对我来说,除非您在终端中输入node index.js,否则我什么都听不见! 当访问者访问您的页面时(我的情况是提交表单),人们如何开始在端口上侦听?
我有一些想法,需要一些指导。 我觉得我缺少链接的一个链接,这阻碍了我的整个项目。
我认为我需要以下之一:
我在正确的轨道上吗? 我需要这些吗? 我已经尝试了这些以及很多其他方法,但是每次尝试实现某人的代码时代码中断时,我都不知道需要什么。
以下是出于笑目的我的代码。
这是由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.