Я новичок и пытаюсь создать приложение с использованием 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à!' });
}
});
};
спасибо, я заметил, но после исправления все то же самое
Я думаю, что вам следует попытаться упростить свой маршрут для тестирования. просто как простой ответ. найдите что-то стабильное, от чего можно будет отталкиваться.
app.get('/api/v1/search/name', ...) измените «Поиск» на «поиск» (строчная буква). хотя бы для согласованности. любой URL-адрес должен быть в нижнем регистре. также в вашем запросе почтальона используйте опцию x-www-form-urlencoded. возможно это поможет стабилизировать ситуацию
Большое спасибо ! Я использовал строчные буквы, затем поменял на прописные, ничего не работает. Только что попробовал x-www-form-urlencoded, все равно не работает 😕
Куда вы импортируете модуль маршрута? Покажите этот код.
Вы уверены, что в параметрах запроса 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-адрес.
вы можете попробовать в браузере без почтальона и посмотреть, работает ли. проверьте ссылку, подобную этой: localhost:9000/api/v1/Search/name?productName=hello
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));
Спасибо за ваши ответы, они заставили меня провести небольшое исследование и кое-что узнать.
SQL-запрос «CELECT...» должен быть «SELECT...», нет?