Разработчик проекта, над которым я работаю слева, только частично завершил интерфейс и бэкэнд, и теперь я пытаюсь подключить серверную часть Node / Express к интерфейсу React / Redux в время окончания проекта.
В приложении имеется ряд раскрывающихся списков со значением категории (т. Е. Медицинское обслуживание, консультирование и т. Д.), И после того, как все они выбраны и отправлены, в базу данных Postgres запрашиваются указанные входные данные для возврата всех соответствующих результатов. удовлетворение критериев пользователей в серии карточек для пользователя.
Основная проблема, которую я оставил (которую я определил с помощью инструментов Redux dev), заключается в том, что, хотя запрос проходит успешно, действие не обновляет свойство data в состоянии (которое должно содержать массив запрашиваемых сервисов). ).
Я включил код для редуктора, который обновляет состояние, а также соответствующий запрос в файле back-end server.js.
Reducer.js
const leftSidebarReducer = (state = initialState, action ) => {
async function categoryQuery(json)
await fetch('/category_query', { //post request in Server.js
method: 'POST',
headers: {
"Content-Type": "application/json",
},
body: json //currently returns the user inputs
})
.then(function(response){
return response.json(); //**Data I want in store here**
})
.catch(err => console.log(err));
}
//--- Further down in the Reducer: ---//
case actionTypes.QUERY_DB:
var newdata = [];
var testStr = JSON.stringify({
cat: state.leftMenu.catDrop,
subCat: state.leftMenu.subCatDrop,
insCat: state.leftMenu.insDrop,
langCat: state.leftMenu.langDrop,
});
categoryQuery(testStr) //Run the async function above with state values
return {
...state,
data: newdata //Where the data should be updating ***
}
Server.js
app.post('/category_query', (req, res) => { //this is the main category query
console.log(req); //this is an attempt to see if we receive the reqs
db.any(
`SELECT * FROM med_services
WHERE cat_name = $1 AND subCat = $2 AND insurance = $3`
,['Medical Care', 'clinic', 'blue-cross']
//normally would be [req.body.cat, req.body.subCat, req.body.insCat]
)
.then(data => {
console.log('DATA:', data); // print data;
res.send(data);
console.log('category query sent successfully')
})
.catch(error => {
res.send('Error processing query');
})
});
Основная проблема здесь заключается в том, что когда редуктор устанавливает data: newData
, я вместо этого получаю пустой массив (т.е. data: []
) вместо массива значений из базы данных.
Другая проблема на самом деле заключается в передаче тела запроса в pg-обещание (для которого я сейчас использую только введенные в строку значения для проверки).
WHERE cat_name = $1 AND subCat = $2 AND insurance = $3`,['Medical Care', 'clinic', 'blue-cross']
Однако при попытке [req.body.cat и т. Д.] Я не могу прочитать свойство body из undefined.