Каким образом можно добавить текст к сообщению в ответе сервера при использовании express?

Как добавить оповещения к ответу API, чтобы получать сообщения вроде "Foo успешно получен" или "Не удалось получить Foo" и отображать их на фронтенде с помощью компонента Vue для уведомлений? Я использую Express.js в BackEnd'e.

Я создал API endpoint для получения данных из базы данных и вот один из пунктов моего контроллера:

```javascript
async getFoo(req, res) {
  try {
    const foo = await db.query(`SELECT * FROM foo ORDER BY id`);
    res.json(foo.rows);
  } catch (error) {
    res.status(500).json({ error: "Не удалось получить Foo" });
  }
}
```

Я хочу добавить оповещение к этому ответу, чтобы на фронтенде можно было использовать его для отображения уведомлений. Я нашел, что можно использовать `res.status(200).send("great")`, но это заменит само тело ответа и я не получу сообщение в формате JSON. Может быть, есть другой способ добавить оповещение или все это лучше делать на фронтенде, обрабатывая статус ответа на клиентской стороне?
  • 10 ноября 2023 г. 21:09
Ответы на вопрос 1
Если вы хотите добавить сообщение к ответу сервера при использовании Express.js, вам нужно изменить формат ответа на объект JSON, содержащий не только данные, но и оповещение. Вот как это можно сделать:

```javascript
async getFoo(req, res) {
  try {
    const foo = await db.query(`SELECT * FROM foo ORDER BY id`);
    res.json({ data: foo.rows, message: "Foo успешно получен" });
  } catch (error) {
    res.status(500).json({ error: "Не удалось получить Foo" });
  }
}
```

Теперь, при успешном получении данных, ответ будет содержать сообщение вместе с данными:

```json
{
  "data": [ ... ],
  "message": "Foo успешно получен"
}
```

При возникновении ошибки, ответ будет содержать только сообщение об ошибке.

На фронтенде вы можете использовать компонент Vue для уведомлений, чтобы отобразить сообщение, полученное из ответа сервера. Вы можете обработать статус ответа и содержание сообщения на клиентской стороне, чтобы показывать уведомления в зависимости от результата запроса. Например:

```vue
<template>
  <div>
    <div v-if="successMessage">{{ successMessage }}</div>
    <div v-if="errorMessage">{{ errorMessage }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      successMessage: "",
      errorMessage: "",
    };
  },
  methods: {
    async fetchData() {
      try {
        const response = await fetch("/api/foo");
        const data = await response.json();
        if (response.ok) {
          this.successMessage = data.message;
          // обработка полученных данных...
        } else {
          this.errorMessage = data.error;
        }
      } catch (error) {
        this.errorMessage = "Произошла ошибка";
      }
    },
  },
  mounted() {
    this.fetchData();
  },
};
</script>
```

В этом примере, в зависимости от статуса ответа сервера, компонент Vue будет отображать определенное сообщение. Вы можете дальше настроить этот компонент для показа оповещений в соответствии с вашими требованиями и стилями.
Похожие вопросы