Я учусь разрабатывать API с помощью Deno's Oak, выполняя базовые запросы к списку продуктов.
Но у меня есть ошибка, которую я не могу исправить.
TypeError - request.body не является функцией
const addProduct = async(
{ request, response } : { request: any, response: any },
) => {
const body = await request.body(); // <-- here
if (!request.hasBody) {
response.status = 400;
response.body = {
success: false,
msg: "No data",
};
}
else {
const product: Product = body.value;
products.push(product);
response.status = 201;
response.body = {
success: true,
data: product,
};
}
};
Имея в своем коде другие запросы, я делюсь с вами только его частью.
export { getProducts, getProduct, addProduct, updateProduct, deleteProduct };
Чтобы вызвать его в маршруте.ts:
router.get('/api/v1/products', addProduct)
затем server.ts:
const port = 5000;
const app = new Application();
app.use(router.routes());
app.use(router.allowedMethods());
console.info('Server running on port ${port}');
await app.listen({ port });
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
PS: для проверки своих запросов я использую Postman
Я, очевидно, пытался удалить круглые скобки, но в этом случае он не извлекает тело, вставленное в Postman (необработанное), а просто возвращает true. Я пытался следовать найденным параллельным решениям, но не будучи экспертом, я не могу их понять и адаптировать.
Кстати, hasBody
считается ненадежным.
можешь пожалуйста попробовать это решение
import { Request, Response } from "https://deno.land/x/oak/mod.ts";
const addProduct = async ({ request, response }: { request: Request, response: Response }) => {
const body = await request.body();
if (!request.hasBody) {
response.status = 400;
response.body = {
success: false,
msg: "No data",
};
}
else {
const product: Product = body.value;
products.push(product);
response.status = 201;
response.body = {
success: true,
data: product,
};
}
};
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
Ответы, которые состоят только из кода, считаются некачественными и могут быть отклонены и удалены. Добавьте объяснения, почему ОП получил упомянутую ошибку и в чем разница в вашем коде, чтобы этой ошибки не было. Вы хотя бы проверяли это?
Я нашел решение! Расширение Deno в VsCode выбирает последнюю версию Oak при импорте, но в последней я думаю, что body() больше не является функцией запроса. Итак, я беру v6.5.0, на данный момент проблем нет.
Возможно, это не решение, но это помогает мне двигаться дальше.
Как именно
addProduct
используется в вашем коде?