Javascript nodejs快速路由器再处理请求
我的快速路由器正在处理一个请求两次,我不知道为什么,导致发送电子邮件两次 我将显示我的前端代码和后端代码 前台:没关系,它只发送一次请求Javascript nodejs快速路由器再处理请求,javascript,node.js,express,router,nodemailer,Javascript,Node.js,Express,Router,Nodemailer,我的快速路由器正在处理一个请求两次,我不知道为什么,导致发送电子邮件两次 我将显示我的前端代码和后端代码 前台:没关系,它只发送一次请求 async cargarZip() { let formData = new FormData(); let zipFile = document.querySelector("#archivoZip"); formData.append("archivoZip", zipFile.files[0]);
async cargarZip() {
let formData = new FormData();
let zipFile = document.querySelector("#archivoZip");
formData.append("archivoZip", zipFile.files[0]);
await axios.post(
CONSTANTES.URL_RUTA_SERVICIOS + "cargas/cargar-zip",
formData,
{headers: {
Authorization: `Bearer ${localStorage.token}`,
"Content-Type": "multipart/form-data",
},
})
.then(function (response) {
// actions
})
.catch(function () {});
}
返回:由于某种原因,路由器重新处理请求
cargasResultadosRouter.post('/cargar-zip', mdAutenticacion.verificaToken,
async function (req, res) {
res.header("Content-Type", "application/json; charset=utf-8");
moment.locale('es')
let fecha = moment().format("L").split("/").join("-")
let hora = moment().format('LTS')
let file = req.files.archivoZip
let fileName = file.name.replace(/ /, '_')
console.log(fecha, hora, "cargas/cargar-zip", "Llegó:", fileName);
let dir = './resultadosParaEnviar';
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir);
console.log(dir, "Creado");
}
let ruta = "/opt/app/ServiciosCliexCovid/OM_ServicioCliexCovid/public/resultadosParaEnviar/"
let rutaArchivoZip = ruta + fecha + " " + fileName
file.mv(rutaArchivoZip, async function (err) {
if (err) {
return res.status(500);
} else {
let rutaArchivoFolder = ruta + fecha + "_" + fileName.split(".")[0];
if (!fs.existsSync(rutaArchivoFolder)) {
fs.mkdirSync(rutaArchivoFolder);
console.log(rutaArchivoFolder, "Creado");
}
await decompress(rutaArchivoZip, rutaArchivoFolder).then(async files => {
await esperarTiempo(100)
console.log(fileName, 'Extraido');
let emails = []
for (const [index, file] of files.entries()) {
await esperarTiempo(100)
let codigo = file.path.match(/(\d+)/);
console.log(index, "Archivo Encontrado:", codigo, "de", files.length);
if (codigo) {
let archivos = []
archivos.push({
filename: file.path,
path: rutaArchivoFolder + '/' + file.path
})
// Get email
let correo = await BD.CargarResultadosDao.CorreoPruebaMolecular(codigo[0])
emails.push({
correo: correo,
archivos: archivos
})
// Sends email
if (correo !== '') {
await enviarCorreoConPruebaMolecular(correo, archivos)
await esperarTiempo(1500)
}
} else {
console.log("NO ENCONTRO:", file.path);
}
}
res.json(emails);
});
}
})
})
function esperarTiempo(tiempo) {
return new Promise((resolve) => {
setTimeout(() => {
resolve("resolved");
}, tiempo);
});
}
日志说:
2020年9月24日15:33:44卡加斯/卡加尔邮政编码:OMNIA_MEDICA 10-09.zip
发件人:
log(fecha,hora,“cargas/cargar-zip”,“Llegó:”,文件名)
2分钟后说:
24-09-2020 15:35:58 cargas/cargar zip Llegó:OMNIA_MEDICA 10-09.zip
发件人:
log(fecha,hora,“cargas/cargar-zip”,“Llegó:”,文件名)
无需从前端重新发送
我前面用的是Vue,服务器在nginx上前面有什么负载平衡器吗?如果响应时间过长,负载平衡器可能会重新发送请求,因为它在一段时间后没有收到响应。2分钟的延迟让我觉得是因为回复时间太长或者没有收到?是的,已经收到了。我认为这可能是问题所在。我真的不知道负载均衡器的功能,但是你认为我应该配置响应时间吗?你知道它在哪里吗?谢谢如果您的回复需要2分钟,那么对我来说,这是您应该解决的API设计问题。回电话不应该花那么长时间;它们应该是异步的,这样你可以立即返回,然后如果请求完成,调用方可以轮询状态(或者得到通知)。你好,Joe,我认为响应过程大约需要4分钟,我知道这是正常的。如果我错了,请纠正我。我知道领航员可以正常等待