[英]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.