增加时间处理组件

This commit is contained in:
2025-07-01 21:54:12 +08:00
parent 98336b9020
commit 318c6b5cc1
5 changed files with 40 additions and 8 deletions

View File

@ -13,7 +13,7 @@ module.exports = {
},
sse: {
heartbeatInterval: 15000, // 15秒
allowedOrigins: process.env.ALLOWED_ORIGINS?.split(',') || ['http://localhost:3001']
allowedOrigins: '*', //process.env.ALLOWED_ORIGINS?.split(',') || ['http://localhost:3001']
},
rateLimit: {
windowMs: 15 * 60 * 1000, // 15分钟

25
package-lock.json generated
View File

@ -1,9 +1,12 @@
{
"name": "sse-server",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "sse-server",
"version": "1.0.0",
"dependencies": {
"body-parser": "^2.2.0",
"cors": "^2.8.5",
@ -11,6 +14,7 @@
"express-rate-limit": "^7.5.1",
"express-sse": "^1.0.0",
"helmet": "^8.1.0",
"moment-timezone": "^0.6.0",
"uuid": "^11.1.0"
}
},
@ -538,6 +542,27 @@
"node": ">= 0.6"
}
},
"node_modules/moment": {
"version": "2.30.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
"integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
"license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/moment-timezone": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.6.0.tgz",
"integrity": "sha512-ldA5lRNm3iJCWZcBCab4pnNL3HSZYXVb/3TYr75/1WCTWYuTqYUb5f/S384pncYjJ88lbO8Z4uPDvmoluHJc8Q==",
"license": "MIT",
"dependencies": {
"moment": "^2.29.4"
},
"engines": {
"node": "*"
}
},
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",

View File

@ -9,6 +9,7 @@
"express-rate-limit": "^7.5.1",
"express-sse": "^1.0.0",
"helmet": "^8.1.0",
"moment-timezone": "^0.6.0",
"uuid": "^11.1.0"
}
}

View File

@ -8,30 +8,33 @@
const express = require('express');
const clients = require('../lib/clients');
const moment = require('moment-timezone')
const router = express.Router();
router.post('/', (req, res) => {
const { message, clientId } = req.body;
const {message, clientId} = req.body;
if (!message) {
return res.status(400).json({ error: 'Message is required' });
return res.status(400).json({error: 'Message is required'});
}
const data = { message, time: new Date().toISOString() };
const shanghaiTime = moment().tz('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss');
const data = {message, time: shanghaiTime};
if (clientId) {
const clientRes = clients.get(clientId);
if (!clientRes) {
return res.status(404).json({ error: 'Client not found' });
return res.status(404).json({error: 'Client not found'});
}
clientRes.write(`data: ${JSON.stringify(data)}\n\n`);
return res.json({ message: 'Message delivered', clientId });
return res.json({message: 'Message delivered', clientId});
}
const count = clients.broadcast(data);
return res.json({ message: 'Message broadcasted', clients: count });
return res.json({message: 'Message broadcasted', clients: count});
});
module.exports = router;

View File

@ -10,6 +10,7 @@ const express = require('express');
const { v4: uuidV4 } = require('uuid');
const { setupSSEHeaders } = require('../lib/sse');
const clients = require('../lib/clients');
const moment = require('moment-timezone');
const router = express.Router();
@ -18,11 +19,13 @@ router.get('/', (req, res) => {
setupSSEHeaders(res);
const shanghaiTime = moment().tz('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss');
// 立即发送确认
res.write(`data: ${JSON.stringify({
status: 'connected',
clientId,
time: new Date().toISOString()
time: shanghaiTime
})}\n\n`);
clients.add(clientId, res);