node.js - 在 node/express 中的 db 查询后从 socket.io 发出
问题描述
我有一个组件,当它安装时,它会向我的服务器发出请求以获取(非常长的)名称列表。为了不阻止我的组件的渲染(因为它只能使用非空列表渲染),我想使用套接字向它发送一系列小得多的列表,而不是一个长列表res.send()
(其中大约需要 4 秒)。
为此,我在我的 express 服务器中使用了 socket.io,但我收到了 404 错误。这是我的设置:
客户端(组件)
import socketIOClient from 'socket.io-client';
componentDidMount() {
console.log('trying to put on sock');
const socket = socketIOClient();
socket.on('names', data => console.log('data'));
}
该组件的父组件是调用api/v1/names
路由的组件。
服务器
const express = require('express');
const socketIo = require('socket.io');
const http = require('http');
const app = express();
app.use(express.static(path.resolve(__dirname, '../build')));
const server = http.createServer(app);
const io = socketIo(server);
app.get('/api/v1/names', (req, res) => {
res.set('Content-Type', 'application/json');
getNames().then((result) => {
// res.send({ result }); what I was doing before (~4 seconds)
io.on('connection', (socket) => {
console.log('New client connected');
// chunk the results into 10 smaller arrays
let final = false;
const parts = _.chunk(result, 10);
parts.forEach((part, pIx) => {
if (pIx === parts.length - 1) final = true;
// Will this be async or not? we shall see...
socket.emit('names', { result: part, final });
});
socket.on('disconnect', () => {
console.log('Client disconnected');
});
});
});
});
最终发生的是我的控制台中的这个错误:GET http://localhost:3000/socket.io/?EIO=3&transport=polling&t=123kj123b 404 (Not Found)
. 永远不会发生的日志io.on('connection')
。看到日志,trying to put on sock
所以我知道它正在尝试听。
解决方案
您可以参考此链接socket.io-client
var socket = require('socket.io-client')('http://localhost:4200');
socket.on('connect', function(){});
socket.on('event', function(data){});
socket.on('disconnect', function(){});
需要像这样连接服务器。
推荐阅读
- apache-flink - 不平衡的 Flink 流式负载
- google-cloud-platform - 将 1000 万条记录的 Google Bigquery 记录发布到 pubsub 主题的最佳选择是什么
- file - 在 TIdMultiPartFormDataStream 中没有“字段名”的 Delphi Indy POST 文件
- java - 如何从 ZK 页面调用后端方法?
- ios - Safari 上的 CSS 动画错误
- celery - Django celery 删除特定任务
- python - 如何一次运行多个环境
- xaml - 如何在 UWP 中的滚动查看器中设置滚动查看器
- r - stat_density2d 平铺几何图形在导出为 PDF 时显示网格
- java - 在达到特定请求阈值之前,Spring Boot 中的多个请求是否由单个线程处理?