我想问一下各位,我想res.send那边延迟3秒传一次,我自己试过setTimeout()客户端传请求后,伺服器会没反应(传不上去),想请问各位怎么解决?
下面有程式码
var current_id = '6438cc71d6e3e690fbc8fc9c';
app.get('/data', (req, res) => {
res.set('Access-Control-Allow-Origin', '*')
res.set('Access-Control-Allow-Private-NetWork', 'true')
res.set('Access-Control-Expose-Headers', 'ETag')
const fishModel = mongoose.model('fishModel', fishSchema);
fishModel.findOne({ _id: { $gt: current_id }}, function(err, nextDocument) {
if (err) {
// console.log(err);
const data = { message: err }
res.json(data)
console.log(data)
console.log("data");
} else {
// console.log(nextDocument);
const jsonString = JSON.stringify(nextDocument.toObject());
const jsonParse = JSON.parse(jsonString);
current_id = jsonParse._id;
console.log("---start---");
res.send(jsonString);
console.log(jsonParse);
console.log("---end---");
}
});
})
如果您想在服务器发送响应之前延迟3秒钟,您可以在 res.send()
调用前使用 setTimeout()
函数将其延迟,如下所示:
app.get('/data', (req, res) => {
res.set('Access-Control-Allow-Origin', '*')
res.set('Access-Control-Allow-Private-NetWork', 'true')
res.set('Access-Control-Expose-Headers', 'ETag')
const fishModel = mongoose.model('fishModel', fishSchema);
fishModel.findOne({ _id: { $gt: current_id }}, function(err, nextDocument) {
if (err) {
const data = { message: err }
res.json(data)
console.log(data)
console.log("data");
} else {
const jsonString = JSON.stringify(nextDocument.toObject());
const jsonParse = JSON.parse(jsonString);
current_id = jsonParse._id;
console.log("---start---");
// 使用 setTimeout() 函数将 res.send() 延迟 3 秒钟
setTimeout(() => {
res.send(jsonString);
console.log(jsonParse);
console.log("---end---");
}, 3000);
}
});
})
请注意,这会在3秒钟后响应所有客户端请求,不仅限于特定的客户端请求。如果您只想在特定的客户端请求上延迟响应,您需要为每个请求跟踪其独特的标识符并使用 setTimeout() 函数。
不知道你这个问题是否已经解决, 如果还没有解决的话:app.get('/data', function(req, res) {
setTimeout(() => {
res.send({data: 'test'});
}, 3000);
});
解决方案:
可以使用Node.js中的stream技术来实现延迟发送数据。
const { Writable } = require('stream');
const writable = new Writable({
write(chunk, encoding, callback) {
setTimeout(() => {
res.write(chunk, encoding);
callback();
}, 3000)
}
});
res.send = function(data) {
writable.write(JSON.stringify(data));
writable.end();
};
完整代码如下所示:
const { Writable } = require('stream');
app.get('/data', function(req, res) {
const writable = new Writable({
write(chunk, encoding, callback) {
setTimeout(() => {
res.write(chunk, encoding);
callback();
}, 3000)
}
});
res.send = function(data) {
writable.write(JSON.stringify(data));
writable.end();
};
res.send({data: 'test'});
});
这样就可以实现延迟3秒发送数据了。