Как добавить итоговое (int) поле в мой API ответа JSON - PullRequest
0 голосов
/ 17 октября 2019

Я разрабатываю API с помощью Express.js. В функции getAll я хочу вернуть массив записей, а также общее количество записей. Это ответ, который я возвращаю:

const users = await User.getAll()
const total = users.length
const response = users
return res.json(response).status(200)

Этот формат [{user1},{user2},{user3}]. Как я могу добавить итог с этим форматом { data: {Record[]}, total: {int} }?

Я пробовал это, но он добавляет ключ для каждого пользователя с его порядковым номером.

const users = await User.getAll()
const total = users.length
const response = {
  ...users,
  total
}
return res.json(response).status(200)

Ответы [ 4 ]

0 голосов
/ 17 октября 2019

Проблема связана с оператором распространения (...). Массив пользователя раскрывается в объекте ответа. Вы можете попробовать следующий код:

const users = await User.getAll()
const total = users.length
const response = {
  data: users,
  total,
}
return res.status(200).json(response)
0 голосов
/ 17 октября 2019
const users = await User.getAll();
return res.json({ data: users, total: users.length }).status(200);
0 голосов
/ 17 октября 2019

...users вызывает боль здесь. Когда вы используете оператор распространения, он позволяет итерацию (здесь ваш users объект) расширяться. Ниже должно работать так, как вы ожидали.

const users = await User.getAll()
const total = users.length
const response = {
  users,
  total
}
return res.json(response).status(200)
0 голосов
/ 17 октября 2019

Вы используете расширение массива в объекте со строкой:

const response = {
    ...users,
    total,
}

Делая это, вы пытаетесь добавить все элементы массива в объект, что невозможно,Но вы можете использовать предложенный вами формат:

const response = {
    data: users,
    total: total,
}

return res.json(response).status(200);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...