Как мне реструктурировать ответ API?

#javascript #arrays #json #foreach #axios

Вопрос:

Вот мой конечный маршрут, есть ли что-то очевидное, чего мне не хватает, когда дело доходит до возвращаемых данных? У меня больше опыта в манипулировании массивами, поэтому при работе с объектами вместо того, чтобы помещать их в массив после возврата данных, как я могу реструктурировать это, чтобы вернуть массив?

 router.get('/caseDetail/:caseName', (req,res) => {
    db.caseDetail.findAll({
        
        include : [db.Part,db.Fault,db.Disposition,db.Contact,db.Site],
        where : {
            caseName:{ 
              [Op.like]: [req.params.caseName]}
        }
    }).then((response) => {
        console.log(response);
        res.json(response)
    }).catch((error) => {
        console.log(error);
    })
})
 

В настоящее время я возвращаю объект, а не массив объектов, который я ищу,
введите описание изображения здесь
введите описание изображения здесь

Комментарии:

1. Вам нужно будет показать форму возвращаемых данных и ожидаемый рефакторинг.

2. вы на самом деле ничего не возвращаете в данный момент 😉 return res.json(response)

3. Можно findAll ли настроить возврат массива? Если есть более одного результата, передается ли массив клиенту? Каким вы хотите видеть содержимое выходного массива?

4. Если вы используете Sequelize, это выглядит так, как будто findAll возвращает массив. Попробуйте использовать console.log(JSON.stringify(response)) в своем маршруте вместо того, чтобы просто console.log(response) подтвердить это. Кроме того, я отмечаю, что в вашем ответе (клиент или сервер, неясно) есть все это в data поле. Есть ли у вас промежуточное программное обеспечение где-нибудь в стеке Express, которое могло бы переформатировать вывод и, возможно, уменьшить массив до одного значения?

5. Я наконец понял, в чем дело, вы заставили меня задуматься о бэкэнде, поэтому я сравнивал его со старыми API, которые я написал, затем я заметил, что на переднем конце маршрута, по которому я пытался попасть, была синтаксическая ошибка, я изменил let items = await axios.get(`/api/caseDetail/:${caseName}`); let items = await axios.get(`/api/caseDetail/${caseName}`); , и все встало на свои места. Очень рад этому, иногда помогает просто поговорить об этом с кем-то, и я очень благодарен за ваши отзывы.

Ответ №1:

вы забываете использовать return в res.json(response)

пробовать return res.json(response)

Комментарии:

1. return здесь нет необходимости, вызов одного из методов res (из которых json один) отправит результат.

Ответ №2:

Проблема здесь заключалась в синтаксической ошибке на моем интерфейсном маршруте После изменения

 let items = await axios.get(`/api/caseDetail/:${caseName}`);
 

Для

 let items = await axios.get(`/api/caseDetail/${caseName}`);
 

Все встало на свои места, и мое использование [Op. like] сработало как заклинание. Спасибо всем вам за помощь!