#node.js #express #socket.io
#node.js #выразить #socket.io
Вопрос:
Это мой node.js код для index.js файл.
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const { mongoose } = require('./config/db.js');
var routes = require('./routes/routes');
var j = require('./utility/mailer');
var app = express();
//app.use(bodyParser.json());
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ extended: true, limit: '50mb' }));
app.use(cors({ origin: 'http://localhost:4200' }));
app.use(express.static('uploads'));
//app.listen(3000, () => console.log('server started'));
app.use(function (req, res, next) {
res.setTimeout(10000, function () {
console.log('timeout call');
res.status(408).send({ 'res': 'timed out' });
//res.end(408);
return;
});
next();
});
app.use('/', routes);
app.set("port", (process.env.PORT || 3000));
//app.listen(app.get("port"), function () {
// console.log("Server started: http://localhost:" app.get("port") "/");
//})
//var server = app.listen(app.get('port'), function () {
// console.log('Express server listening on port ' server.address().port);
//});
var server = app.listen(3000);
var io = require("socket.io").listen(server, {
handlePreflightRequest: (req, res) => {
const headers = {
"Access-Control-Allow-Headers": "Content-Type, Authorization",
"Access-Control-Allow-Origin": req.headers.origin,
"Access-Control-Allow-Credentials": true
};
res.writeHead(200, headers);
res.end();
}
});
let timerId = null,
sockets = new Set();
io.sockets.on('connection', socket => {
sockets.add(socket);
console.log(`Socket ${socket.id} added`);
if (!timerId) {
startTimer();
}
socket.on('clientdata', data => {
console.log(data);
});
socket.on('disconnect', () => {
console.log(`Deleting socket: ${socket.id}`);
sockets.delete(socket);
console.log(`Remaining sockets: ${sockets.size}`);
});
});
function startTimer() {
//Simulate stock data received by the server that needs
//to be pushed to clients
timerId = setInterval(() => {
if (!sockets.size) {
clearInterval(timerId);
timerId = null;
console.log(`Timer stopped`);
}
let value = ((Math.random() * 50) 1).toFixed(2);
//See comment above about using a "room" to emit to an entire
//group of sockets if appropriate for your scenario
//This example tracks each socket and emits to each one
for (const s of sockets) {
console.log(`Emitting value: ${value}`);
s.emit('data', { data: value });
}
}, 2000);
}
var gulp = require('gulp');
var sonarqubeScanner = require('sonarqube-scanner');
gulp.task('default', function (callback) {
sonarqubeScanner({
serverUrl: "https://localhost:8081",
}, callback);
});
io.listen(8000);
//server.listen(8080);
Однако сервер не передает данные, как указано в функции таймера. Можете ли вы помочь мне исправить это? Есть ли способ использовать app.listen с его помощью?
Следовал нескольким инструкциям. Пару дней назад все работало нормально. Затем я изменил кое-что, что все испортило. Я думаю, мне нужно выяснить, что я изменил. Есть какое-нибудь решение?
Ответ №1:
Если вы хотите запустить сокет.ввод-вывод на тот же порт, что и веб-сервер, вы можете попробовать это:
const app = express();
const server = require('http').createServer(app);
const io = require('socket.io')(server);
io.on('connection', (socket) => {
//your code here
});
http.listen((process.env.PORT || 3000), () => {
console.log('Started');
});
Ответ №2:
Я объявляю, что переменной port будет порт, на котором вы разместите свой сервер вот так const port = 3000;
(# порта может быть любым, что вам нравится). Затем вы добавляете код, который заставит сервер прослушивать:
server.listen(port, () => {
// What will happen when the server starts listening
});
Хотя вам нужно объявить переменную сервера там, где она говорит server.listen()
, если вы использовали простой http-сервер, вы можете использовать, скажем, это:
const server = http.createServer((req, res) => {
// What the server would do
});
Кроме того, вам нужно объявить, какой http находится внутри const server = http.createServer()
. Что вам нужно сделать, это добавить фрагмент кода, который говорит, что такое http, например, так const http = require('http');
. Это заставит простой http-сервер прослушивать http://localhost:your порт /. Конечный продукт должен выглядеть примерно так:
const http = require('http');
const port = 3000;
const server = http.createServer((req, res) => {
// Your Code Here
});
server.listen(port, () => {
// Your Code Here
});
Затем в вашем терминале введите node index.js
, который должен запустить ваш сервер, и сможете увидеть его в вашем браузере!!
Примечание: Этот код может быть слишком простым для того, что вы делаете, но может сработать
Комментарии:
1. Операционная система хотела бы внедрить
socket.io
сexpress
помощью. В вашем ответе вы не использовали ни один из этих пакетов.