Я получаю сообщение об ошибке Cannot set headers after they are sent to the client
при попытке POST
при использовании промежуточного программного обеспечения для аутентификации. Я исследовал и обнаружил, что посылаю данные клиенту, прежде чем я думал, что я был. Но я не могу понять, где это происходит. Я думаю, что это в самом коде промежуточного программного обеспечения, потому что когда я запускаю код без промежуточного программного обеспечения, он работает отлично.
Пожалуйста, прости мою плохую печать. Это работа в процессе. Я все еще выясняю, какие предметы я собираюсь получить.
Маршрут
app.post("/users/post-item", authenticate, itemController.postItem);
Auth Middleware
export const authenticate = async (
req: Request,
res: Response,
next: NextFunction
) => {
const token: any = req.headers["token"];
if (!token) {
console.log("No token");
return res.status(400).send({ message: "Token is not provided" });
}
try {
const decoded: any = await jwt.verify(token, "abc123");
const user = await db("user").where({ id: decoded.id.id });
req.body.user = { user };
next();
} catch (error) {
return res.status(400).send(error);
}
next();
};
Контроллер
export const postItem = (req: Request, res: Response) => {
const { itemName, price, description, user, location, species } = req.body;
try {
items
.postItem({
itemName: itemName,
price: price,
description: description,
userId: user.user[0].id,
location: location,
species: species
})
.then((data: any) => {
// Header is sent somewhere before here
res.sendStatus(200);
});
} catch (error) {
throw new Error(`Something went wrong: ${error}`);
}
};
Функция PostItem
export const postItem = ({
itemName,
price,
description,
userId,
location,
species
}: {
itemName: string;
price: string;
description: string;
userId: string;
location: string;
species: string;
}): any => {
return db("item_for_sale").insert({
name: itemName,
price,
description,
user_id: userId,
location,
species
});
};```