Некоторые запросы работают, а другие нет на почтальоне

Я новичок и пытаюсь создать приложение с использованием NodeJs и ExpressJs. Я тестирую серверную часть с помощью почтальона. некоторые запросы работают отлично, а другие нет, я получаю сообщение о невозможности получить URL-адрес, код 404 не найден уже несколько часов, и, как я уже упоминал, другие маршруты работают очень хорошо.

На стороне сервера все вроде нормально, тип содержимого — JSON, я проверил код несколько раз и не вижу ошибки. есть идеи, пожалуйста? Спасибо 🙏.

Сервер: Некоторые запросы работают, а другие нет на почтальоне Ответ почтальона: Некоторые запросы работают, а другие нет на почтальоне

Модель:

module.exports = (_db) => {
  db = _db;
  return SearchModel;
};
class SearchModel {
  //Get a product by name
  static getProductByName(productName) {
    return db
      .query('SELECT * FROM Products WHERE productName = ?', [
        productName
      ])
      .then((res) => {
        console.info(res);
        return res;
      })
      .catch((error) => {
        console.info(error);
        return error;
      });
  }
  // Get products by gender
  static getProductByGender(gender) {
    return db
      .query('SELECT * FROM Products WHERE gender = ?', [gender])
      .then((res) => {
        return res;
      })
      .catch((error) => {
        return error;
      });
  }
  // Get products by brand
  static getProductByBrand(brand) {
    return db
      .query('SELECT * FROM Products WHERE brand=?', [brand])
      .then((res) => {
        return res;
      })
      .catch((error) => {
        return error;
      });
  }
  // Get products by mouvement
  static getProductByMouvement(mouvement) {
    return db
      .query('SELECT * FROM Products WHERE mouvement=?', [mouvement])
      .then((res) => {
        return res;
      })
      .catch((error) => {
        return error;
      });
  }
}

Маршрут:

  // Get a product by name
  module.exports = (app, db) => {
  const searchModel = require('../models/SearchModel')(db);

  // Route pour afficher un produit par son nom
  app.get('/api/v1/Search/name', async (req, res) => {
    const productByName = await searchModel.getProductByName(
      req.body.productName,
    );

    if (productByName.code) {
      res.json({ status: 500, msg: 'Server Error!' });
    } else if (!productByName) {
      res.json({ status: 404, msg: 'Product not found!' });
    } else {
      res.json({ status: 200, result: productByName, msg: 'Voilà!' });
    }
  });
};

SQL-запрос «CELECT...» должен быть «SELECT...», нет?

This Guy 24.05.2024 16:16

спасибо, я заметил, но после исправления все то же самое

Jenny 24.05.2024 16:19

Я думаю, что вам следует попытаться упростить свой маршрут для тестирования. просто как простой ответ. найдите что-то стабильное, от чего можно будет отталкиваться.

This Guy 24.05.2024 16:24

app.get('/api/v1/search/name', ...) измените «Поиск» на «поиск» (строчная буква). хотя бы для согласованности. любой URL-адрес должен быть в нижнем регистре. также в вашем запросе почтальона используйте опцию x-www-form-urlencoded. возможно это поможет стабилизировать ситуацию

This Guy 24.05.2024 16:31

Большое спасибо ! Я использовал строчные буквы, затем поменял на прописные, ничего не работает. Только что попробовал x-www-form-urlencoded, все равно не работает 😕

Jenny 24.05.2024 16:36

Куда вы импортируете модуль маршрута? Покажите этот код.

jQueeny 24.05.2024 21:20
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
84
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы уверены, что в параметрах запроса GET стоит body?

Это правильный путь:

app.get('/path', (req, res) => {
  const productName= req.query.productName;

  // Do something with the query parameters
  console.info(productName);
  
  res.send('Query parameters received');
});

А поскольку продукт не найден, вы возвращаете 404, что означает, что страница не найдена, насколько показывает PostMan.

Спасибо @IT goldman! Я попробовал ваш метод, но, к сожалению, у меня все та же проблема: почтальон не может получить URL-адрес.

Jenny 24.05.2024 18:59

вы можете попробовать в браузере без почтальона и посмотреть, работает ли. проверьте ссылку, подобную этой: localhost:9000/api/v1/Search/name?productName=hello

IT goldman 24.05.2024 19:29

req.body в GET и DELETE запросе недействителен, вместо него следует использовать параметры или запросы. Нравиться:

app.get('/api/v1/Search/:name', async (req, res) => {
  const name = req.params.name
  console.info(name) //    try /api/v1/Search/abc => name = 'abc'
})
// or
app.get('/api/v1/Search', async (req, res) => {
  const name = req.query.name
  console.info(name) //    try /api/v1/Search/?name=abc => name = 'abc'
})
Ответ принят как подходящий

проблема для меня заключалась в том, что я забыл добавить searchRoute в базу данных в server.js! На это ушло 2 дня 😑, но теперь все работает хорошо.

app.get('/', async (req, res) => {
          res.json({ status: 200  });
        });
        userRoute(app, db);
        productRoute(app, db);
        orderRoute(app, db);
        authRoute(app, db);
        searchRoute(app, db);
      })
      .catch((error) => console.info(error));

Спасибо за ваши ответы, они заставили меня провести небольшое исследование и кое-что узнать.

Другие вопросы по теме