nodejs - 无法全局搜索无法设置标头



我尝试对数据库中的所有模式进行全局搜索,以找到医生或医院。

const express = require("express");
const app = express();
const Hospital = require("../models/hospital");
const Medico = require("../models/medico");
app.get("/busqueda/todo/:busqueda", async (req, res, next) => {
var busqueda = req.params.busqueda;
var rex = new RegExp(busqueda, "i");
try {
let buscaHosp = await Hospital.find({ nombre: rex }, (err, hospitales) => {
return res.status(200).json({
ok: true,
hospitales: hospitales
});
});
if (!buscaHosp) {
res.json({
ok: false,
message: "No hospital."
});
return;
} else {
let buscarMed = await Medico.find({ nombre: rex }, (err, medicos) => {
return res.status(200).json({
ok: true,
medicos: medicos
});
});
}
} catch (error) {
next(error);
}
});

布斯克达.js

它抛出此错误:

错误 [ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头 at ServerResponse.setHeader (_http_outgoing.js:469:11( at ServerResponse.header (C:\Users\Leonardo Barahona\Desktop\angular-adv\restserver-adminproode_modules\express\lib\response.js:767:10( at ServerResponse.send (C:\Users\Leonardo Barahona\Desktop\angular-adv\restserver-adminproode_modules\express\lib\response.js:170:12( at ServerResponse.json (C:\Users\Leonardo Barahona\Desktop\angular-adv\restserver-adminproode_modules\express\lib\response.js:267:15( at Medico.find (C:\Users\Leonardo Barahona\Desktop\angular-adv\restserver-adminpro\server\routes\busqueda.js:38:32( at C:\Users\Leonardo Barahona\Desktop\angular-adv\restserver-adminproode_modules\mongoose\lib\model.js:4530:16 at process.nextTick (C:\Users\Leonardo Barahona\Desktop\angular-adv\restserver-adminproode_modules\mongoose\lib\helpers\query\completeMany.js:35:39( 在process._tickCallback(内部/进程/next_tick.js:61:11( 在以下位置发出"错误"事件: at C:\Users\Leonardo Barahona\Desktop\angular-adv\restserver-adminproode_modules\mongoose\lib\model.js:4532:13 at process.nextTick (C:\Users\Leonardo Barahona\Desktop\angular-adv\restserver-adminproode_modules\mongoose\lib\helpers\query\completeMany.js:35:39( 在process._tickCallback(内部/进程/next_tick.js:61:11(

这是因为您设置了两次响应

它将始终设置在

let buscaHosp = await Hospital.find({ nombre: rex }, (err, hospitales) => {
return res.status(200).json({
ok: true,
hospitales: hospitales
});
});

相反,您应该通过具有一个名为response = {}的函数作用域变量来构建返回对象;

并做response = await Hospital.find({ nombre: rex }, (err, hospitales) => {});

其中返回值为

return {
ok: true,
hospitales: hospitales
};

对于其他情况也是如此,只需将此变量设置为正确的值,然后在函数结束时只需运行res.status(200).json(response);

最新更新