我知道这听起来很奇怪,但是情况很奇怪。我一直在尝试在第一个响应之前将第二个请求发送到服务器(通过相同的连接)。我得到的是对第一个请求的响应,第二个请求被服务器忽略。服务器使连接保持活动状态:
class MyComponent extends Component {
state = {
isLoading: false,
species: '',
}
handleSpecies(e) {
console.log(e.target.text)
this.setState({isLoading: true});
let filteredSpecies = [];
const url = 'http://127.0.0.1:8000/api/films/search/'+ e.target.text;
fetch(url)
.then(results => {
if(results.ok){
return results.json();
}
throw new Error('Failed to fetch');
})
.then(data => {
this.setState({
species: data,
isLoading: false,
});
})
.catch((error) => {
this.setState({
error: error.message,
isLoading: false,
});
});
}
render() {
const {
isLoading,
species,
} = this.state;
return (
<div className="col-md-4">
<div className="list-group">
{
isLoading
? <Loading/>
: species.map((specie, i) => <a href="#" className="list-group-item" key={i}> {specie.name} </a>)
}
</div>
</div>
)
}
}
这是处理请求的路由:
server.on("connection", socket => {
socket.setTimeout(50 * 1000);
socket.on("timeout", () => {
console.log("socket timeout");
socket.end();
});
socket.on("close", hadError => {
console.log(
hadError
? "Socket closed due to ERROR during transmission"
: "Socket closed"
);
});
});
我认为 HTTP协议不允许这样做,但是可能有一些解决方法。
Websockets 不是解决方案,因为客户端(不是浏览器)是嵌入式设备。
这是测试的图像(我使用TCP客户端程序ti模拟来自客户端的请求消息):
右侧终端(黑色终端)是节点服务器。白色的是终端。客户端发送的是粉红色终端上的内容。黑色为服务器的响应。您可以看到服务器在标头之后立即发送app.post("/enddev", (req, res) => {
console.log("REQUEST TO ", req.route.path);
console.log("Req Header ", req.headers);
res.write("request\r\n");
setInterval(() => {
res.write("ack\r\n");
}, 2000);
});
消息。但是,在第二次请求时,没有响应出现。
答案 0 :(得分:0)
我认为您从未打过res.end()
。没有这个,node.js认为您的响应还没有结束。